如何在同一Linux程序中同时使用C ++共享库和静态库?
使用g ++进行管理时,我试图在库前后安排-static
命令,我不想静态链接,但没有结果。 ld
到g++
抱怨共享库的.a文件在哪里(无法找到-lwhatever 错误)。
编辑:问题不在于无法找到-lwhatever 错误,因为它只是因为没有指定库的静态版本而发生。我要做的是指定哪些库是静态链接的,哪些是动态的。
答案 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。您链接的文件格式指定它是共享链接还是静态链接。您只需选择要链接的正确文件即可。