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

Sie*_*geX 53 c linker static gcc

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

如果我将-static标志传递给gcc,ld将会错误地说它无法找到有问题的库(我认为它正在寻找.a版本)并且不会构建可执行文件.理想情况下,如果无法找到静态库,我希望能够尽可能地告诉'ld'静态链接并故障转移到共享对象库.

在interium中我尝试了类似gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe希望'ld'在lib1和lib2中静态链接,但只对lib3rdparty有运行时依赖.不幸的是,这不符合我的意图; 相反,-shared标志覆盖了-static标志,所有内容都被编译为共享对象.

是静态链接一个全有或全无的交易,还是有某种方式我可以混合和匹配?

Ant*_*ony 65

看看 这个帖子,你可以看到它可以完成.GNU的人建议

gcc foo.c -Wl,-Bstatic -lbar -lbaz -lqux -Wl,-Bdynamic -lcorge -o foo.exe
Run Code Online (Sandbox Code Playgroud)