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

时间:2012-03-02 23:05:36

标签: c++ linux static shared

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

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

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

2 个答案:

答案 0 :(得分:6)

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

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

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

提示

-Wl的{​​{1}}选项用于将参数传递给g++调用的ld链接器。

您可能希望使用g++了解g++ -v调用g++的方式,您也可以使用ld同时要求g++ -v -Wl,--verbose详细。

答案 1 :(得分:2)

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