gpt4 book ai didi

c - 将自定义 glibc 与 bazel 结合使用

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:57 27 4
gpt4 key购买 nike

我在非 root (debian) 环境中,在编译二进制文件时我得到了一个

Failed to open library! - ./libdmlab.so
dlopen: cannot load any more object with static TLS

我了解到这是一个比较常见的问题,在 glibc/2.21.1 中被规避了通过增加限制。我现在正在尝试在本地安装更新的 (2.22) 版本的 glibc 并在 bazel 中使用它进行链接。

我已经从源代码编译了 glibc,并向 PATHCPATHLIBRARY_PATH 添加了适当的内容。将 glibc/lib 添加到 LD_LIBRARY_PATH 会导致 ldd 段错误,因此我将其删除。

接下来就是在bazel中使用本地安装的glibc的问题了。我尝试使用 -linkeropt(以及 -copt)作为:

bazel run --linkopt "-Wl,--rpath=/u/sygnowsj/bin/glibc -Wl,--dynamic-linker=/u/sygnowsj/bin/glibc/lib/ld-linux-x86-64.so.2" run //target

this answer 中所述,但它没有改变任何东西。我也尝试添加

"-Wl,--rpath=/u/sygnowsj/bin/glibc",
"-Wl,--dynamic-linker=/u/sygnowsj/bin/glibc/lib/ld-linux-x86-64.so.2",

BUILD 文件中有问题的库的 linkeropts,但它也没有帮助。

如何为所有目标制作 bazel 链接到我的 glibc 版本?我能否以任何其他方式规避达到静态 TLS 限制的问题?

最佳答案

bazel run --linkopt "-Wl,--rpath=/u/sygnowsj/bin/glibc -Wl,--dynamic-linker=/u/sygnowsj/bin/glibc/lib/ld-linux-x86-64.so.2" run //target

这看起来不对:那里有两个 run。此外,将单个 -Wl,--rpath...ld-linux-x86-64.so.2 参数传递给链接器不会执行您想要的操作。您需要:

--linkopt=-Wl,--rpath=/u/sygnowsj/bin/glibc \
--linkopt=-Wl,--dynamic-linker=/u/sygnowsj/bin/glibc/lib/ld-linux-x86-64.so.2

或:

 --linkopt=-Wl,--rpath=/u/sygnowsj/bin/glibc,--dynamic-linker=/u/sygnowsj/bin/glibc/lib/ld-linux-x86-64.so.2

最后,您的 --rpath 值:/u/sygnowsj/bin/glibc 看起来不对。应该是:

-Wl,--rpath=/u/sygnowsj/bin/glibc/lib

(因为这是您的 ld-linux 所在的位置)。

关于c - 将自定义 glibc 与 bazel 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43742200/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com