非系统g++链接系统库,忽略rpath
Non-system g++ linking system libraries, ignoring rpath
我有一个非系统安装的g++,并试图使用
编译一个程序/MYINSTALLDIR/g++ -L/MYINSTALLLIBDIR -Wl,-rpath,MYINSTALLLIBDIR main.cpp -o tester
但是当我运行
ldd。/测试
我得到libstdc++和其他链接的gcc/g++库是系统安装的,而不是那些在指定的rpath位置。
我已经阅读了将g++ 4.8链接到libstdc++,并且我看到的唯一其他选择是尝试更改g++规范文件。因为它是由root拥有的,这对我来说是有问题的。
有什么建议吗?
(注意,我也检查了LD_LIBRARY_PATH=")。我不喜欢改变LD_LIBRARY_PATH
编辑:我试着在二进制文件中查看NEEDED和RPATH字段,它们是我所期望的。例如,NEEDED包含"libstdc++", RPATH只是MYINSTALLLIBDIR的值。
然后设置LD_DEBUG="libs"并在测试机上重新运行ldd。看起来ldd在系统版本之前看到了正确的库路径,但没有选择它。与libstdc++相关的输出如下:
13337: find library=libstdc++.so.6 [0]; searching
13337: search path=/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/tls/x86_64:/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/tls:/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/x86_64:/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2 (RPATH from file ./tester)
13337: trying file=/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/tls/x86_64/libstdc++.so.6
13337: trying file=/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/tls/libstdc++.so.6
13337: trying file=/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/x86_64/libstdc++.so.6
13337: trying file=/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/libstdc++.so.6
13336: 13337: find library=libc.so.6 search cache= [/etc/ld.so.cache0]; searching
13336: search cache=/etc/ld.so.cache
13337: trying file=/usr/lib64/libstdc++.so.6
13336: 13337: trying file=
我相信正确的libstdc++应该是"libstdc++"。因此,在/opt/rh/…/4.8.2文件夹中。没有libstdc++.so。6"。
编辑:Marc Glisse是正确的。结果是新的gcc libstdc++。因此,只需选择先前安装的系统版本。因此,这似乎是正确的行为。您正在使用红帽开发人员工具集的GCC,它使用特殊的链接模型来确保它编译的二进制文件不依赖于较新的libstdc++.so
,确切地说,您不必为设置RPATH或LD_LIBRARY_PATH
或类似的东西而感到混乱。它只是工作™。因此,看到您的二进制文件依赖于系统libstdc++.so.6
正是应该发生的事情。
我已经关闭了这个答案作为另一个类似的副本,我已经给出了更多的细节,如何链接到libstdc++使用devtoolset工作
相关文章:
- 在fstream期间忽略空行
- 概念TS检查忽略私有访问修饰符
- C++宏忽略之后的内容
- 不知道某个东西是否被忽略会引入未定义的行为吗
- clang整洁10忽略了我的NOLINT命令
- If语句在c++中被忽略
- 错误:在为指针赋值时,void值没有被忽略
- 为什么stream::忽略未按预期工作
- Craps游戏问题,忽略if语句
- c++字符串中的字符将被忽略
- 为什么在 x64 中忽略__stdcall调用约定?
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- MSVC 忽略 [[maybe_unused]] 的功能?
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- Pytorch torch.cholesky忽略异常
- C++ - 忽略并从其他文件获取数据
- 如何忽略输入流中的某些字符?
- PangoLayout 中忽略的新行
- 可执行文件忽略rpath条目
- 非系统g++链接系统库,忽略rpath