当其他 linked 库 link stdc++ 为动态时,如何将 libstdc++ linking 设置为静态?

How to set libstdc++ linking to static when other linked library link stdc++ as dynamic?

我有 link stdc++ 动态的库。我想用新文件创建新的共享库,link 它们和 link libstdc++ 静态。

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

我该怎么做?

I have libraries that link stdc ++ dynamically. I want to create new shared library with new files, link them and link libstdc++ statically.

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

I tried to add -static-libstdc++ to compilation but it doesn't work. I checked with ldd and my library is still dynamically linked.

首先,将 -static-libstdc++ 添加到 compilation nothing。您需要添加到 linking.

其次,不清楚您 运行 ldd 在做什么,以及您的库是否依赖于其他共享库。如果是,ldd 将显示 t运行sitivelibstdc++ 的依赖性,这完全是预期的。

要查看您的库是否直接依赖于libstdc++.so.6,请执行以下操作:

readelf -d yourlib.so | grep 'NEEDED.*libstdc'