【问题标题】:How to set libstdc++ linking to static when other linked library link stdc++ as dynamic?当其他链接库将 stdc++ 链接为动态时,如何将 libstdc++ 链接设置为静态?
【发布时间】:2019-09-25 13:11:11
【问题描述】:
我有动态链接stdc++ 的库。我想用新文件创建新的共享库,链接它们并静态链接libstdc++。
我尝试将-static-libstdc++ 添加到编译中,但它不起作用。我检查了ldd,我的库仍然是动态链接的。
我该怎么做?
【问题讨论】:
标签:
c++
gcc
makefile
shared-libraries
dynamic-linking
【解决方案1】:
我有动态链接 stdc ++ 的库。我想用新文件创建新的共享库,链接它们并静态链接 libstdc++。
这是一个非常糟糕的主意(TM)。当您的二进制文件在具有不同版本 libstdc++.so.6 的系统上执行时,您将遇到符号冲突(除非您非常小心地将所有相关符号隐藏在共享库中),这可能会导致非常难以调试崩溃或其他未定义的行为。
我尝试将 -static-libstdc++ 添加到编译中,但它不起作用。我检查了 ldd,我的库仍然是动态链接的。
首先,将-static-libstdc++ 添加到编译 不会什么。您需要添加到链接。
其次,不清楚您在什么上运行ldd,以及您的库是否依赖于其他共享库。如果是这样,ldd 将显示对libstdc++ 的传递依赖,这是完全可以预料的。
要查看您的库是否直接依赖于libstdc++.so.6,请执行以下操作:
readelf -d yourlib.so | grep 'NEEDED.*libstdc'