代码之家  ›  专栏  ›  技术社区  ›  Jesse Beder

为什么Xcode不能识别我的库搜索路径?

  •  4
  • Jesse Beder  · 技术社区  · 16 年前

    我已经定好了 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 回复  |  直到 16 年前
        1
  •  2
  •   richq luc    16 年前

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

        2
  •  1
  •   Jason Coco superfell    16 年前

    Xcode在可能的多个sdk上工作,因此每当您定义这些类型的东西(如header_search_path或library_search_path)时,当前sdk根目录都会预先准备好传递给链接器的实际路径。

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

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

    现在可以在系统中找到您的库。

    如果您不想这样做,那么您必须查看cmake并找出如何让它为您的实际库生成库需求(我对cmake一无所知,因此我无法帮助您)。这也是为什么你看到用户头搜索路径和头搜索路径之间的区别是你的另一个问题。

    作为另一个选项,您还可以使用其他_ldflags构建变量指定此路径:

    OTHER_LDFLAGS=-L/opt/local/lib
    

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