在同一程序中使用Linux C++共享库和静态库

Using Linux C++ shared and static libraries in a same program

本文关键字:共享 C++ 静态 Linux 程序      更新时间:2023-10-16

如何在同一个Linux程序中同时使用C++共享库和静态库?

当使用g++进行管理时,我尝试将-static命令安排在我不想静态链接的库的前面和后面,但没有结果。ldg++抱怨共享库的.a文件在哪里(找不到-whatever错误)。

EDIT:问题不在于找不到-lwhatever错误,因为它只是因为没有指定库的静态版本而发生的。我要做的是指定哪些库要静态链接,哪些库要动态链接。

假设静态libfoo.a和动态libbar.so,则可以使用

g++ -o prog main.o other.o -Wl,-Bstatic -lfoo -Wl,-Bdynamic -lbar

您应该避免从动态库调用静态库中的函数;这将是丑陋的

提示

-Wlg++的选项用于向g++调用的ld链接器传递参数。

您可能希望使用g++ -v来了解g++是如何调用ld的,也可以使用g++ -v -Wl,--verbose来要求ld详细说明。

您不需要指定-static或-dynamic。链接文件的格式指定它是共享链接还是静态链接。您只需要选择正确的文件进行链接即可。