【问题标题】: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'

【讨论】:

    猜你喜欢
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    相关资源
    最近更新 更多