2

使用 glew,我正在尝试链接简单的程序

#include </usr/include/GL/glew.h>

int main (int argc, const char * argv[])
{

    glewInit();

    return 0;
}

在 XCode 4 中,在 OSX Lion 下,它会报告错误:

ld: library not found for -lGLEW.1.7.0
Command /Developer/usr/bin/clang++ failed with exit code 1

但是,错误输出还报告链接器的以下标志

-mmacosx-version-min=10.7 -L/usr/lib -lGLEW.1.7.0 -lglfw -framework OpenGL -framework Cocoa

事实上,libGLEW.1.7.0 确实驻留在 /usr/lib

此外,如果我尝试手动构建程序,使用

  gcc -L/usr/lib -lGLEW.1.7.0 main.cpp

我得到一个没有报告任何错误的 a.out 文件(如果运行会导致分段错误,但也许这是意料之中的)

关于什么可能导致 XCode 产生此错误以及如何避免它的任何想法?

4

2 回答 2

2

我自己构建并安装了 GLEW,并且在 OS X 上的 makefile 中使用纯 gcc 时遇到了同样的问题,并编译了来自https://github.com/jckarter/hello-gl的代码

以下步骤解决了该问题:

  1. 我发现我的 GLEW 库(libGLEW.alibGLEW.dylib)安装在/usr/lib目录中(它肯定是由 root 拥有的,其他人拥有 r 权限)。试图将GLEW_LIB变量从makefile更改为/usr/lib但仍然得到ld: library not found for -lGLEW
  2. 之后,我尝试将编译后的程序直接链接到静态库(没有 -l 标志) - 为此我-lGLEWgcc命令中删除并将其更改为直接链接 t 库/usr/lib/libGLEW.a- 它编译和链接很好 好的 - 这是一个先尝试的解决方法
  3. 然后我使用以下命令创建了两个指向我的库的链接:

    ln -s /usr/lib/libGLEW.a /usr/local/lib/libGLEW.a

    ln -s /usr/lib/libGLEW.dylib /usr/local/lib/libGLEW.dylib

最后让它与原始makefile一起使用(仅将GLEW_LIB变量更改为/usr/local/lib)。

可能 GLEWmake install应该/usr/local/lib直接放置库。

于 2013-11-14T20:06:23.270 回答
1

(根据leppie的建议,我已将其从问题的编辑中删除并将其作为答案发布)

我可能已经在我原来的帖子中认为不重要的一些细节中找到了答案。所以在这里,以防其他人可能遇到类似的问题。

显然,XCode4 项目默认使用 clang++,它在链接阶段接受一个参数 -isysroot (显然 ld 不接受)。

现在,如果在您的构建设置(如我的情况)中,您的 Base SDK 已定义为当前 Mac OS 以外的其他内容,则将引入参数 -isysroot 以及指向该 SDK 的目录值,因此(这是我的猜测)将此添加到您可能包含在 -L 中的所有其他 lib 目录中。

就我而言,-L/usr/lib 有效地变成了 -L/Developer/SDKs/MacOSX10.7.sdk/usr/lib,它确实存在并且不包含 libGLEW,因此出现错误“找不到库”

于 2011-12-12T15:57:15.503 回答