我有一个C项目,可以生成十个可执行文件,我希望所有这些文件都可以静态链接。我面临的问题是,其中一个可执行文件使用的是第三方库,其中只有共享对象版本可用。
如果我将-static
标志传递给gcc,ld会报错,说它无法找到有问题的库(我认为它正在寻找.a版本)并且不会构建可执行文件。理想情况下,我希望能够尽可能地告诉'ld'静态链接,并在无法找到静态库的情况下故障转移到共享对象库。
在interium中我尝试了类似gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe
的东西,希望'ld'在lib1和lib2中静态链接,但只对lib3rdparty有运行时依赖。不幸的是,这不符合我的意图;相反,-shared
标志覆盖了-static
标志,所有内容都被编译为共享对象。
是静态链接一个全有或全无的交易,还是有某种方式我可以混合搭配?
答案 0 :(得分:63)
查看this thread您可以看到它可以完成。 GNU的人建议
gcc foo.c -Wl,-Bstatic -lbar -lbaz -lqux -Wl,-Bdynamic -lcorge -o foo.exe