我有一个 ARM 设备,上面运行着不可升级的 linux 内核。我想在上面运行一些 C++11 程序,但是,系统libstdc++.so.6
太libc.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 目录:
编辑:似乎动态链接器可能出于某种原因跳过了我的新 libc。因为当我尝试使用预加载时libc.so.6
,LD_PRELOAD
我得到:
ERROR: ld.so: object '/tmp/newlibs/libc.so.6' from LD_PRELOAD cannot be preloaded: ignored.