gpt4 book ai didi

gcc - 该程序无法找到正确版本的 glibc/libstdc++,尽管它是静态链接的

转载 作者:行者123 更新时间:2023-12-04 13:41:39 25 4
gpt4 key购买 nike

我试图将我的程序与 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++ 中查找我的函数?我究竟做错了什么?

谢谢!

最佳答案

I am trying to link my program statically with glibc, because version of the glibc on the target machine is pretty much unpredictable. I used linker flags -static-libgcc and -static-libstdc++ and it worked fine.



这并没有影响 glibc 的版本( libc ),它不同于 libgcclibstdc++ .使用这些标志,您仍然生成了一个动态链接的可执行文件,它预计不适用于较旧的发行版。

你可以用 -static 链接你的可执行文件标志,这应该给你一个完全静态的可执行文件。

更新:

重新阅读您的问题后;您的问题不在于 glibc .您的问题是您正在链接 libboost_log.so ,这本身取决于 libstdc++.so.6 .

答案是链接 libboost*.a而不是 libboost*.so .您可以尝试通过以下方式实现它:
g++ $(OBJS) -static-libgcc -static-libstdc++ -Wl,-Bstatic -lboost_log ... \
-Wl,-Bdynamic

(尾随 -Wl,-Bdynamic 非常重要。)

关于gcc - 该程序无法找到正确版本的 glibc/libstdc++,尽管它是静态链接的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16247094/

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