【问题标题】:How to find the default search path for object code libraries on Mac OS X?如何在 Mac OS X 上找到目标代码库的默认搜索路径?
【发布时间】:2018-04-09 17:17:42
【问题描述】:

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

然而,与手册页相反,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 在哪里存储库的默认搜索路径?

【问题讨论】:

标签: macos linker ld lib


【解决方案1】:

我是操作员。这个问题的(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 无关。

【讨论】:

    【解决方案2】:

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

    它只是硬编码到动态加载器 (dyld) 中。在this code 中搜索“sLibraryFallbackPaths”。顺便说一句,它表明手册页包含“/lib”是不正确的。这实际上不是默认搜索路径的一部分。

    【讨论】:

      猜你喜欢
      • 2015-02-03
      • 2011-11-09
      • 2015-03-12
      • 2012-10-19
      • 2011-07-18
      • 2012-06-12
      • 2011-05-02
      • 2010-09-27
      • 1970-01-01
      相关资源
      最近更新 更多