繁体   English   中英

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

[英]Make /usr/local/lib a default library search path for ld on mac os x?

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

编辑:设置DYLD_LIBRARY_PATH环境变量对我没有任何作用。 我必须设置LIBRARY_PATH变量才能将/usr/local/lib下安装的/usr/local/libgcc

安装XCode时是否有关于此的选项? (是工作电脑,自己没装)

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

在此处输入图片说明

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

在此处输入图片说明

如果要添加默认 包含和搜索路径,则需要使用:

对于包含路径:

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

但这些都不是永久性的。 为了在重新启动时使用这些变量,您需要创建一个启动脚本。 有关示例,请参阅此页面。

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

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

请注意,默认情况下 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 在动态库方面存在挑战。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM