如何在Mac OS X上找到目标代码库的默认搜索路径?

时间:2017-10-28 04:26:29

标签: macos linker ld lib

dyld(动态链接编辑器)的手册页说:
DYLD_FALLBACK_LIBRARY_PATH ...是一个以冒号分隔的包含库的目录列表。它用作安装路径中找不到的库的默认位置。默认情况下,它设置为$(HOME)/ lib:/ usr / local / lib:/ lib:/ usr / lib。

但是,与手册页相反,默认情况下,在Mac OS X上,DYLD_FALLBACK_LIBRARY_PATH为空或未定义,如以下bash命令所示。

printenv DYLD_FALLBACK_LIBRARY_PATH
# OR
echo $DYLD_FALLBACK_LIBRARY_PATH

实际上,dyld手册页中列出和解释的所有环境变量都是空的或未定义的,如以下bash脚本所示。

#!/bin/bash

while IFS=$'\n' read -r; do
  printf %b "$REPLY  =  "
  printenv "$REPLY"
  echo
done < <(cat << EOF
DYLD_FRAMEWORK_PATH
DYLD_FALLBACK_FRAMEWORK_PATH
DYLD_LIBRARY_PATH
DYLD_FALLBACK_LIBRARY_PATH
DYLD_ROOT_PATH
DYLD_SHARED_REGION
DYLD_INSERT_LIBRARIES
DYLD_FORCE_FLAT_NAMESPACE
DYLD_IMAGE_SUFFIX
DYLD_PRINT_OPTS
DYLD_PRINT_ENV
DYLD_PRINT_LIBRARIES
DYLD_PRINT_LIBRARIES_POST_LAUNCH
DYLD_BIND_AT_LAUNCH
DYLD_NO_FIX_PREBINDING
DYLD_DISABLE_DOFS
DYLD_PRINT_APIS
DYLD_PRINT_BINDINGS
DYLD_PRINT_INITIALIZERS
DYLD_PRINT_REBASINGS
DYLD_PRINT_SEGMENTS
DYLD_PRINT_STATISTICS
DYLD_PRINT_DOFS
DYLD_NO_PIE
DYLD_SHARED_CACHE_DIR
DYLD_SHARED_CACHE_DONT_VALIDATE
EOF
)

此外,虽然/etc/ld.so.conf是Linux存储加载器搜索的所有目录以便查找库的地方,但Mac OSX缺少/etc/ld.so.conf

然后,Mac OS X在哪里存储库的默认搜索路径?

2 个答案:

答案 0 :(得分:2)

我是o.p.这个问题(46986246)。

我没有足够的权限来编辑我的问题或添加评论。 jwdonahue添加了评论,说我的问题可能与7285587重复。让我向他解释。

这是7285587和我的问题之间的区别。 帖子7285587询问默认搜索路径是什么。 我知道默认搜索路径是$(HOME)/lib:/usr/local/lib:/lib:/usr/lib,正如dyld手册页上所写,我知道7285587的存在。

另一方面,我的问题是询问存储默认搜索路径的位置。虽然手册页说它存储在环境变量DYLD_FALLBACK_LIBRARY_PATH中,但我发现它没有存储在DYLD_FALLBACK_LIBRARY_PATH中。即使DYLD_FALLBACK_LIBRARY_PATH为空,configure脚本和/或ld似乎也可以从某处学习默认搜索路径。因此,似乎库的默认搜索路径存储在除DYLD_FALLBACK_LIBRARY_PATH之外的其他位置。

我想知道它的存储位置,以及如何验证它是$(HOME)/lib:/usr/local/lib:/lib:/usr/lib

顺便说一句,我正在尝试将Linux程序移植到Mac OS X.我的问题与Cocoa或OSX原生程序无关。因此,我的问题与/ Library,/ System / Library或〜/ Library无关。

答案 1 :(得分:0)

  

然后,Mac OS X在哪里存储库的默认搜索路径?

它只是硬编码到动态加载程序(dyld)中。搜索&#34; sLibraryFallbackPaths&#34;在this code。顺便说一下,它显示包含&#34; / lib&#34;的手册页不正确。这实际上并不是默认搜索路径的一部分。