【发布时间】:2017-09-30 05:33:48
【问题描述】:
我在非 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,并在 PATH、CPATH 和 LIBRARY_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,但它也没有帮助。
如何针对我的glibc 版本为所有目标创建bazel 链接?我可以通过其他方式规避达到静态 TLS 限制的问题吗?
【问题讨论】:
标签: c linker glibc bazel thread-local-storage