为什么Xcode不能识别我的LIBRARY_SEARCH_PATHS?

时间:2009-04-16 21:34:58

标签: xcode linker environment-variables cmake

我已将LIBRARY_SEARCH_PATHS设置为/opt/local/lib,并验证相关库是否存在(我正在链接到GLEW):

$ls /opt/local/lib

libGLEW.1.5.1.dylib libfreetype.a       libz.a
libGLEW.1.5.dylib   libfreetype.dylib   libz.dylib
libGLEW.a       libfreetype.la      pkgconfig
libGLEW.dylib       libz.1.2.3.dylib
libfreetype.6.dylib libz.1.dylib

但是Xcode给了我链接器错误

library not found for -lGLEW

我正在使用CMake生成Xcode项目,所以我不想显式修改Xcode项目(如果有人建议将其添加为框架,或类似的东西)。 Xcode识别出USER_HEADER_SEARCH_PATHS罚款(如this question所示);为什么不在这里工作?

2 个答案:

答案 0 :(得分:2)

也许在你的CMakeLists.txt中添加这样的东西?

find_library(GLEW_LIB GLEW /opt/local/lib)
if(NOT ${GLEW_LIB})
  message(FATAL_ERROR "Could not find GLEW")
endif()
target_link_libraries(myprogram ${GLEW_LIB} ...)

其中myprogram是需要与库链接的目标可执行文件的名称。您可以将...替换为您在该可执行文件上使用的其他库。

这样,CMake会为您处理库路径详细信息。

答案 1 :(得分:1)

Xcode适用于多个SDK,因此无论何时定义这些类型的内容(如HEADER_SEARCH_PATHS或LIBRARY_SEARCH_PATHS),当前的SDK根目录都会附加到传递给链接器的实际路径上。

因此,实现这项工作的一种方法是将您的目录添加到SDK中。例如,假设您使用Mac OS X 10.5 sdk进行构建,则可以添加您的opt目录:

ln -s /opt /Developer/SDKs/MacOSX10.5.sdk/opt

您的图书馆现在可以在您的系统上找到。

如果您不想这样做,那么您将不得不查看CMake并了解如何让它为您的实际库生成库需求(我对CMake一无所知,所以我可以在那里帮助你。这也是您在另一个问题上看到USER_HEADER_SEARCH_PATHS和HEADER_SEARCH_PATHS之间存在差异的原因。

作为另一种选择,您还可以使用OTHER_LDFLAGS构建变量指定此路径:

OTHER_LDFLAGS=-L/opt/local/lib

这会导致链接器搜索/ opt / local / lib及其标准路径,并且不需要您生成不同的项目文件。