1

我有一个 ARM 设备,上面运行着不可升级的 linux 内核。我想在上面运行一些 C++11 程序,但是,系统libstdc++.so.6libc.so.6旧,无法在运行时支持 C++11。我有较新库的副本,但我不确定如何告诉我的程序使用新库而不是旧库。我创建了一个名为 的新目录/tmp/newlibs,并将新共享对象的副本放在那里。然后,我使用以下标志编译:

g++ -std=c++11 -Wl,-rpath,/tmp/newlibs test.cpp -o test

但是当我尝试执行该文件时,出现以下错误:

/test: /lib/libc.so.6: version `GLIBC_2.17' not found (required by /tmp/newlibs/libstdc++.so.6)

很明显,该rpath标志适用于libstdc++,但看起来它不适用于较新版本的libc.so.6. 我在这里缺少什么吗?其中是否libstdc++.so.6有我无法更改的硬编码路径?

我觉得这是一个与这个问题非常相似的问题,除了在我的情况下它没有完全利用我的新 glibc 目录:

单个主机上的多个 glibc 库

编辑:似乎动态链接器可能出于某种原因跳过了我的新 libc。因为当我尝试使用预加载时libc.so.6LD_PRELOAD我得到:

ERROR: ld.so: object '/tmp/newlibs/libc.so.6' from LD_PRELOAD cannot be preloaded: ignored.

4

0 回答 0