生成可执行文件时是否同时使用libstdc++.a和libstdc++.so?

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

如果我选择这样做:

gcc my.cpp -lstdc++

它与 libstdc++.so 链接,对吧?但是代码中有一些 c/c++ 初始化部分(全局/静态变量/对象、atexit() 函数等),似乎它们还应该需要链接到 libstdc++.a 文件。

所以我的问题是,由于某种原因,链接命令是否总是使用 libstdc++.a,即使我指定与 .so 文件链接?

谢谢。

c++ linux static linker libstdc++
2个回答
1
投票

gcc my.cpp -lstdc++

这通常是错误的做法。相反,你应该这样做:

g++ my.cpp

它与 libstdc++.so 链接,对吧?

取决于 GCC 的配置和安装方式,但大多数情况下是的。

但是代码中有一些 c/c++ 初始化部分(全局/静态变量/对象、atexit() 函数等),似乎它们还应该需要链接到 libstdc++.a 文件。

这是错误的。你从哪里得到这个错误的印象?

所以我的问题是,链接命令是否总是使用 libstdc++.a

不,通常不会。


0
投票

如果您使用

g++ test.cpp
,它会链接到“libstdc++”(默认为共享库,如果存在,libstdc++.so),如果您运行
g++ -static-libstdc++ test.cpp
,那么它会链接到listdc++.a(如果可能)。或者
g++ -static 
这恰好意味着 -static-libstdc++

© www.soinside.com 2019 - 2024. All rights reserved.