dyld (动态链接编辑器)的手册页上写着:
DYLD_FALLBACK_LIBRARY_PATH ...是包含库的目录的冒号分隔列表。它用作在安装路径中找不到的库的默认位置。默认设置为$(HOME)/lib:/usr/local/lib:/lib:/usr/lib。
但是,与手册页相反,在Mac上,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缺少/etc/ld.so.conf。
那么,Mac将库的默认搜索路径存储在哪里?
发布于 2017-10-29 06:27:40
我就是首席执行官。这个问题的答案(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上。我的问题与Cocoa或OSX原生程序无关。因此,我的问题与/Library、/系统/库或~/库无关。
发布于 2017-10-29 08:36:46
那么,Mac将库的默认搜索路径存储在哪里?
它只是被硬编码到动态加载器(dyld)中。在this code中搜索"sLibraryFallbackPaths“。顺便说一下,它表明手册页中包含"/lib“是不正确的。这实际上不是默认搜索路径的一部分。
https://stackoverflow.com/questions/46986246
复制相似问题