【问题标题】:Why doesn't Xcode recognize my LIBRARY_SEARCH_PATHS?为什么 Xcode 不能识别我的 LIBRARY_SEARCH_PATHS?
【发布时间】:2010-10-19 23:29:53
【问题描述】:

我已将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);为什么它在这里不起作用?

【问题讨论】:

    标签: xcode linker environment-variables cmake


    【解决方案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 及其标准路径,并且不需要您生成不同的项目文件。

    【讨论】:

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

      【讨论】:

        猜你喜欢
        • 2014-10-28
        • 1970-01-01
        • 1970-01-01
        • 2019-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多