为什么 Xcode 即使在搜索路径中列出了 GLEW 动态库也找不到?

Why is Xcode unable to find a GLEW dynamic library even when it is listed in the search path?

OS X Yosemite 10.10.5 Xcode6.4

背景:我需要使用 OpenGL 加载库 例如 GLEW 因为我的电脑不支持 OpenGl我正在学习的版本。所以,我下载了 GLEW-zip 文件并使用 make 安装动态库。

现在:我正尝试在 Xcode 中使用此动态链接库 (libGLEW.1.13.0.dylib),但出现以下错误“ld: library not found for -lGLEW” .但是,我已经告诉 Xcode 在哪里可以找到它:

  1. 首先,将/usr/lib/libGLEW.1.13.0.dylib 添加到项目的Build Phases -> Link With Binary图书馆
  2. 然后,将/usr/lib 添加到项目的Build Settings -> Library Search 路径.
  3. 最后,添加包含文件:/usr/include 到项目的 Build Settings -> Header Search 路径

是什么或可能是什么导致了这个问题?


已解决:

问题: 动态库安装在错误目录 /usr/lib 。它应该在 /usr/local/lib。下面@Ken Thomases 的完整解释。

解决方案: 将 Makefile 的 GLEW_DEST ?= /usr 更改为 GLEW_DEST ?= /usr/local。这里简单提一下http://glew.sourceforge.net/install.html

我认为问题的根源在于您将 GLEW 安装到了 /usr/lib。一般情况下,/usr/lib 应该保留给系统库。第三方库应该去别的地方,比如/usr/local/lib。 GLEW 构建系统可能允许您在配置期间指定 "prefix" 或 /usr/local 或 "make install"。您必须查阅其文档。

/usr/lib 不好的一个原因是使用 Xcode 的典型构建使用 link 命令的 -isysroot 选项。而是将基于标准系统目录的路径重定向到 SDK 目录。因此,对 /usr/lib 的引用被解释为对 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib 的引用。基于SDK的开发就这样完成了。

显然,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib 不包含 libGLEW.1.13.0.dylib你正试图 link 到。因此 link 错误。

因此,您可以将 GLEW 安装到 /usr/local 并将其安装到 link。但是,您必须明白,这不会生成可以分发到其他系统的可执行文件。那些其他系统将没有 GLEW,因此您的程序将无法加载。您真正需要做的是将 GLEW 构建为一个框架,并 link 反对它并将其作为您的应用程序包的一部分发布。或者,如果不能将 GLEW 构建为框架,您需要构建它并且 "install" 它不是进入系统而是进入私有构建目录,然后将该构建目录复制到您的应用程序包中。您还需要确保对 GLEW 库的引用和 GLEW 库之间的引用是相对于您的应用程序包的,因此它可以放在最终用户系统的任何位置并且引用仍然可以解析。 (默认情况下,引用将使用绝对路径,并且仅当库位于这些确切路径时才会被解析。)