c++ - 针对非默认 glibc 的链接

标签 c++ c glibc

我正在尝试链接 Andi Kleen's glibc implementation为带有 pthreads 的程序启用锁省略。 我按如下方式链接我的程序:

g++ \
-Wl,--rpath=/path/glibc-elision/build/lib \
-Wl,--dynamic-linker=/path/glibc-elision/build/lib/ld-linux-x86-64.so.2 \
-o program program.o \
-fgnu-tm -mrtm -pthread \
-Wl,--no-as-needed --enable-lock-elision=yes

只要我不使用 libstdc++ 的任何组件,一切正常。

但是尽快,例如std::vector 被引用,动态链接器找不到 libstdc++.so.6 (error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No这样的文件或目录).

为解决此错误,我尝试使用 -Wl,--rpath=/path/glibc-elision/build/lib;/usr/lib/x86_64-linux 提供自定义和标准 glibc -gnu/libstdc++.so.6。 这不是正确的调用,但想法是以某种方式提供这两个库。

那么问题是:

如何将程序链接到两个 glibc 的不同组件?

我正在使用 gcc (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1 在 Ubuntu 13.10 上工作。

最佳答案

感谢Nemo's comment ,可以通过将 C++ 运行时附加到 rpath 来解决该问题。就我而言,这是

-Wl,--rpath=/path/glibc-elision/build/lib:/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu

也可以使用 export LD_LIBRARY_PATH=/your/path 设置路径。

事实证明,我错误地使用了 ; 而不是 : 来附加原始帖子中的路径。

关于c++ - 针对非默认 glibc 的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23644691/

相关文章:

c++ - 在代码中定义字符串与控制台输入之间的区别

c++ - sdl_ttf 文本换行

c - Write() 给出奇怪的整数符号

使用 malloc 为结构体分配 C 内存

c - 使用 glibc 依赖项从 chroot 动态加载库

embedded - glibc 可以在裸机或 RTOS 平台上运行吗?

c++ -/lib64/libc.so.6标准解: version `GLIBC_2.14' not found

c++ - opencv .at 处理不同的图像类型

c++ - 如何使用 googletest 失败进入断点

c - Perl 中的消息队列