我已将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所示);为什么不在这里工作?
答案 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及其标准路径,并且不需要您生成不同的项目文件。