链接时可以混合静态和共享对象库吗?

我有一个C项目,生成十个可执行文件,我想要静态链接所有这些文件。 我面临的问题是,其中一个可执行文件使用第三方库,其中只有共享对象版本可用。

如果我将-static标志传递给gcc,ld会报错,说找不到问题的库(我认为它正在寻找.a版本),并且不会build立可执行文件。 理想情况下,如果找不到静态库,我希望能够告诉“ld”尽可能静态地链接到共享对象库。

在interium我尝试了一些像gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe ,希望“ld”能够在lib1和lib2中静态链接,但只对lib3rdparty有运行时依赖。 不幸的是,这没有按照我的意图工作。 而是-shared标志覆盖了-static标志,所有东西都被编译为共享对象。

是静态链接一个或多或less的交易,还是有一些方法,我可以混合和匹配?

看这个线程,你可以看到它可以完成。 GNU的人build议

 gcc foo.c -Wl,-Bstatic -lbar -lbaz -lqux -Wl,-Bdynamic -lcorge -o foo.exe