使/ usr / local / lib成为mac os x上ld的默认库搜索路径?

时间:2014-12-05 11:18:48

标签: c++ xcode path linker-errors ld

我安装了XCode,但由于某种原因,/ usr / local / lib不在默认的库搜索路径中:

gcc -Xlinker -v

给了我:

@(#)PROGRAM:ld  PROJECT:ld64-224.1
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 armv6m armv7m armv7em
Library search paths:
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/lib
Framework search paths:
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/

这很不幸,因为/usr/local/lib是已安装库的相当规范的位置,并且/etc/ld.so.conf上没有ldconfig + mac os x来修改默认的库搜索路径。因此,如果不使用-L/usr/local/lib,则会导致链接器错误。除了设置环境变量DYLD_LIBRARY_PATH之外还有其他非运行时选项吗?

编辑:设置DYLD_LIBRARY_PATH env变量对我没有任何作用。我必须设置LIBRARY_PATH env变量,以便能够将/usr/local/lib下安装的库与gcc相关联。

安装XCode时是否有选项? (这是一台工作电脑,我自己没有安装过它)

2 个答案:

答案 0 :(得分:3)

要使用Xcode向项目添加临时库,我执行了以下操作:

enter image description here

要向我的XCode库搜索路径添加临时包含路径,我必须执行以下操作:

enter image description here

如果您想添加默认include and search paths,则需要使用:

对于包含路径:

CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH

对于图书馆路径:

LIBRARY_PATH

为了使OS X中的Xcode和其他GUI应用程序(在10.10上测试)能够访问这些环境变量,您需要使用以下命令设置变量:

/bin/launchctl setenv LIBRARY_PATH /usr/local/lib
/bin/launchctl setenv CPATH /usr/local/include

但这些并非永久性的。为了在重新启动时使用这些变量,您需要创建启动脚本。 See this page for an example.

答案 1 :(得分:0)

以DYLD_开头的环境变量(例如DYLD_LIBRARY_PATH)特定于Apple的动态链接编辑器dyld。手册页指出:

DYLD_LIBRARY_PATH 这是用冒号分隔的包含库的目录列表。动态链接器 在搜索默认目录之前,先搜索这些目录。它允许 您可以测试现有库的新版本。 对于程序使用的每个库,动态链接器在以下目录中的每个目录中查找它: 依次为DYLD_LIBRARY_PATH。如果仍然找不到该库,则会搜索DYLD_FALL- 依次使用BACK_FRAMEWORK_PATH和DYLD_FALLBACK_LIBRARY_PATH。使用-L选项设置otool(1)。发现该exe-的框架和共享库 cutable与之相关。

请注意,默认情况下DYLD_FALLBACK_LIBRARY_PATH已包含对标准/ usr / local / lib的引用。

DYLD_FALLBACK_LIBRARY_PATH 这是用冒号分隔的包含库的目录列表。它用作 在安装路径中找不到的库的默认位置。默认情况下,它设置为 $(HOME)/ lib:/ usr / local / lib:/ lib:/ usr / lib。

Xcode具有项目范围或特定于目标的构建设置,例如“库搜索路径”,您可以在其中定义指向链接器知道的非标准位置的路径。

除了将* .dylib文件复制和添加到Xcode项目之外,您还需要将这些文件“安装”到这些已知库位置之一。否则,O / S加载程序(启动过程)将无法在实际启动或运行应用映像时使用它们。

请参阅:https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/UsingDynamicLibraries.html

请注意,C ++和Object-C在动态库方面都面临挑战。