我有一个生成十个可执行文件的 C 项目,我希望将所有这些文件都静态链接。我面临的问题是,其中一个可执行文件使用了第 3 方库,其中只有共享对象版本可用。
如果我将 -static
标志传递给 gcc,ld 会出错,说它找不到有问题的库(我假设它正在寻找 .a 版本)并且可执行文件不会建成。理想情况下,我希望能够告诉“ld”尽可能多地静态链接,并在找不到静态库时故障转移到共享对象库。
在 interium 中,我尝试了类似 gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe
的方法,希望“ld”能够静态链接到 lib1 和 lib2,但是仅对 lib3rdparty 具有运行时依赖性。不幸的是,这并没有像我预期的那样工作;相反,-shared
标志覆盖了 -static
标志,所有内容都被编译为共享对象。
是静态链接一个全有或全无的交易,还是有什么方法可以混合搭配?
最佳答案
查看this thread你可以看到它可以完成。 GNU 的人建议
gcc foo.c -Wl,-Bstatic -lbar -lbaz -lqux -Wl,-Bdynamic -lcorge -o foo.exe
关于链接时可以混合使用静态库和共享对象库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2954387/