gpt4 book ai didi

c++ - 非系统 g++ 链接系统库,忽略 rpath

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:07 26 4
gpt4 key购买 nike

<分区>

我有一个非系统安装的 g++,我正在尝试使用 编译一个程序

/MYINSTALLDIR/g++ -L/MYINSTALLLIBDIR -Wl,-rpath,MYINSTALLLIBDIR main.cpp -o tester

但是当我运行

ldd ./tester

我知道 libstdc++ 和其他链接的 gcc/g++ 库是系统安装的,而不是指定 rpath 位置中的库。

我已通读 linking g++ 4.8 to 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++ 应该是/opt/rh/.../4.8.2 文件夹中的“libstdc++.so”。那里没有“libstdc++.so.6”。

编辑:Marc Glisse 是正确的。原来新的gcc libstdc++.so只是选择了之前安装的系统版本。所以这似乎是正确的行为。

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