dyld
(动态链接编辑器)的手册页说:但是,与手册页相反,DYLD_FALLBACK_LIBRARY_PATH 在 Mac OS X 上默认为空或未定义,如以下 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 将库的默认搜索路径存储在哪里?
那么,Mac OS X 将库的默认搜索路径存储在哪里?
它只是硬编码到动态加载器(dyld)中。在此代码中搜索“sLibraryFallbackPaths”。顺便说一下,它表明手册页包含“/lib”是不正确的。这实际上并不是默认搜索路径的一部分。
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 无关。