4

我已经设置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良好(如在这个问题中);为什么它在这里不起作用?

4

2 回答 2

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 将为您处理库路径详细信息。

于 2009-04-16T22:05:56.460 回答
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 及其标准路径,并且不需要您生成不同的项目文件。

于 2009-04-16T21:48:09.013 回答