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

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

在使用g ++进行pipe理时,我试图安排静态命令,并且不想静态链接库,但是没有任何结果。 ld通过g++抱怨共享库的.a文件在哪里( 无法find-lwhatever errors )。

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

假设一个静态libfoo.a和一个动态libbar.so你可以使用

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

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

暗示

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

您可能想要使用g++ -v来理解g++如何调用ld ,并且还可以使用g++ -v -Wl,--verbose来让ld变得冗长。

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