当其他链接库将stdc ++设置为动态时,如何将libstdc ++链接设置为静态?

问题描述 投票:0回答:1

我有可以动态链接stdc ++的库。我想用新文件创建新的共享库,链接它们并静态链接libstdc ++。我试图将-static-libstdc ++添加到编译中,但是它不起作用。我检查了ldd,但我的库仍处于动态链接状态。我该怎么办?

c++ gcc makefile shared-libraries dynamic-linking
1个回答
0
投票

我有可以动态链接stdc ++的库。我想用新文件创建新的共享库,链接它们并静态链接libstdc ++。

这是一个非常糟糕的主意(TM)。当您的二进制文件在具有不同版本libstdc++.so.6的系统上执行时,您将遇到符号冲突(除非您非常谨慎地将所有相关符号隐藏在共享库中),这可能会导致非常难以调试的崩溃或其他未定义的行为。

我试图将-static-libstdc ++添加到编译中,但是它不起作用。我检查了ldd,但我的库仍处于动态链接中。

首先,将-static-libstdc++添加到编译会执行无]。您需要添加到linking

[其次,不清楚您对ldd进行了什么操作,以及您的库是否依赖于其他共享库。如果是这样,ldd将显示对libstdc++transitive

依赖性,这是完全可以预期的。

要查看您的库直接

是否依赖libstdc++.so.6,请执行以下操作:
readelf -d yourlib.so | grep 'NEEDED.*libstdc'
© www.soinside.com 2019 - 2024. All rights reserved.