【问题标题】:how to change the default path in ld.so如何更改 ld.so 中的默认路径
【发布时间】:2015-04-11 03:10:34
【问题描述】:

我使用 ubuntu 14.10 和 crosstool-ng-1.20.0 创建从主机:x86_64 到目标:i686 的工具链, 我知道 glibc 会创建 ld.so 但我不知道如何将 ld.so 中的默认路径从“/lib, /usr/lib”更改为“/lib32, /usr/lib32”。

  1. 我想在目标机器上的 ld.so 中将默认路径从“/lib, /usr/lib”更改为我的设置“/lib32, /usr/lib32”。 (因为对于 32 位库,我将每个 .so 文件都放在 /lib32 中,而对于 x86_64 而不是 i686,我会将其他 .so 文件放到 /lib 中)

  2. 我不想在编译时在主机上添加一些标志(如“-z nodeflib”、“--rpath=dir”)来更改目标机器上每个二进制文件的搜索路径。我希望每个不使用这些标志的二进制文件都可以使用 ld.so 找到正确的库

有人知道怎么做吗?

ps。 我使用 crosstool-ng 来制作 gcc-4.9 linaro, glibc-2.20 linaro, binutl ...等...

【问题讨论】:

    标签: linux gcc linker toolchain crosstool-ng


    【解决方案1】:

    您可能不需要更改默认路径,而是添加路径到配置。

    根据您的系统,ld.so 可以使用 /etc/ 中的文件进行配置,也可能使用 '/etc/ld.so.conf.d/etc/ld.so.d 下的文件进行配置。 ld.soldconfig 的手册页是开始阅读的好地方。

    【讨论】:

    • 感谢 Thomas~ 但在我的情况下,该方法行不通。在我的目标系统中,我的目标机器中没有 /etc/ld.so*。在我的目标系统中,我们不使用 ld.so.d 来放置额外的路径。
    • 我知道库将搜索依赖于: 1. DT_RPATH 2. 环境变量 LD_LIBRARY_PATH 3. DT_RUNPATH 4. 从缓存文件 /etc/ld.so.cache 5. 在默认路径 /lib 中,然后是 /usr/lib。但是我们不想改变 env 值和二进制的 cflag,所以 1~3 方法我们不会使用。在我的目标系统中,我的目标机器中没有 /etc/ld.so*。在我的目标系统中,我们不使用 ld.so.d 来放置额外的路径。所以方法4行不通。所以我仍然需要在方法 5 上更改 ld.so 中的默认路径。
    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2021-06-19
    • 2015-11-12
    • 1970-01-01
    • 2019-10-16
    相关资源
    最近更新 更多