我正在尝试将我的程序与 glibc 静态链接,因为目标机器上的 glibc 版本几乎是不可预测的。我使用了链接器标志 -static-libgcc 和 -static-libstdc++ 并且效果很好。可执行文件很大,但我可以忍受。不幸的是,当我在目标机器上运行我的可执行文件时(在下面的示例中它被命名为“mytest”),我收到以下错误:
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by libboost_log.so.1.53.0)
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by libboost_log.so.1.53.0)
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by libboost_log.so.1.53.0)
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by libboost_date_time.so.1.53.0)
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by libboost_thread.so.1.53.0)
如果我在 mytest 上做“字符串”,它会给我
$ strings mytest | grep GLIBC
GLIBC_2.9
GLIBC_2.7
GLIBC_2.8
GLIBC_2.3.2
GLIBC_2.2.5
GLIBCXX_3.4.15
GLIBCXX_3.4.11
GLIBCXX_3.4.14
GLIBCXX_3.4.9
GLIBCXX_3.4
我认为,这意味着静态链接工作正常。为什么加载器仍然尝试在共享 glibc 和 libstdc++ 中查找我的函数?我究竟做错了什么?
谢谢!