链接到非默认的glibc

5

我正在尝试将Andi Kleen的glibc实现链接到一个使用pthread的程序中,以启用锁消除功能。 我按照以下方式链接我的程序:

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 such file or directory”)。
为了解决此错误,我尝试使用-Wl,--rpath=/path/glibc-elision/build/lib;/usr/lib/x86_64-linux-gnu/libstdc++.so.6提供自定义和标准glibc。这不是正确的调用,但想法是以某种方式提供两个库。
所以问题是: 如何针对两个glibc的不同组件链接程序?
我正在使用Ubuntu 13.10,gcc(Ubuntu/Linaro 4.8.1-10ubuntu8)4.8.1。

2
这听起来像是你的新 ld-linux-x86-64.so.2 找不到 C++ 运行时库... 作为一个快速检查,你可以尝试将环境变量 LD_LIBRARY_PATH 设置为 /usr/lib64 - Nemo
是的,这似乎是正确的方法:与“libstdc++.so.6”错误不同,我收到了一个错误,指出找不到“libgcc_s.so.1”(这表明已找到“libstdc++.so.6”)。 - mschrimpf
1个回答

3
感谢Nemo的评论,通过将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来设置。
原来的帖子中,我错误地使用了;而不是:来追加路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接