为啥即使在搜索路径中列出了 GLEW 动态库,Xcode 也无法找到它?

Posted

技术标签:

【中文标题】为啥即使在搜索路径中列出了 GLEW 动态库,Xcode 也无法找到它?【英文标题】:Why is Xcode unable to find a GLEW dynamic library even when it is listed in the search path?为什么即使在搜索路径中列出了 GLEW 动态库,Xcode 也无法找到它? 【发布时间】:2015-09-20 20:03:27 【问题描述】:

OS X 优胜美地 10.10.5 Xcode 6.4

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

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

    首先,将 /usr/lib/libGLEW.1.13.0.dylib 添加到项目的构建 Phases -> Link With Binary Libraries 然后,将 /usr/lib 添加到项目的 Build Settings -> Library Search 路径。 最后,将包含文件:/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

【问题讨论】:

这是适用于 ios 还是 MacOS? 您不需要添加/usr/lib/usr/include,因为它们是标准路径。你能发布ls -l /usr/lib/libGLEW*的输出吗? @***foe 我需要使用 /usr/include 因为这是库的头文件所在的位置,否则我需要直接添加到我的项目目录中。上面发布的ls -l /usr/lib/libGLEW* 的输出。 显示产生错误(包括错误)的步骤的构建脚本。 i.imgur.com/YlVGMIY.png 【参考方案1】:

我相信问题的根源在于您将 GLEW 安装到 /usr/lib 中。通常,/usr/lib 应该为系统库保留。第三方库应该放在其他地方,例如 /usr/local/lib。 GLEW 构建系统可能允许您在配置或“make install”期间指定 /usr/local 的“前缀”。您必须查阅其文档。

/usr/lib 不好的一个原因是使用 Xcode 的典型构建使用链接命令的-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重新尝试链接到。因此链接错误。

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

【讨论】:

非常感谢!这就是问题所在,事实上,它甚至在 github 页面中被指出:github.com/nigels-com/glew/issues/52 但从未被纠正。 @user1644677 提示:如果有人提供了有用的(以任何方式)答案,请投票以鼓励他们回来帮助他人。如果他们提供了您认为的答案,那么您也应该接受答案。 @***foe SO 用户需要(15

以上是关于为啥即使在搜索路径中列出了 GLEW 动态库,Xcode 也无法找到它?的主要内容,如果未能解决你的问题,请参考以下文章

Linux(gnu)环境动态链接库的搜索路径

使用带有 glew 的 VBO 访问冲突

Opengl ES Glew库 ----- By YDD的铁皮锅

即使定义了搜索路径,也无法找到自定义共享库

linux 添加动态库路径

为啥即使对于私有链接也会继承包含路径