【发布时间】:2011-02-26 14:49:42
【问题描述】:
我有一个生成十个可执行文件的 C 项目,我希望将所有这些文件都静态链接。我面临的问题是其中一个可执行文件使用了只有共享对象版本可用的第 3 方库。
如果我将-static 标志传递给gcc,ld 将出错,说它找不到有问题的库(我认为它正在寻找.a 版本)并且不会构建可执行文件。理想情况下,我希望能够告诉“ld”尽可能多地静态链接,如果找不到静态库,则故障转移到共享对象库。
在中间阶段,我尝试了类似gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe 的方法,希望“ld”能够静态链接到 lib1 和 lib2,但仅在运行时依赖于 lib3rdparty。不幸的是,这并没有按我的预期工作。相反,-shared 标志覆盖了-static 标志,所有内容都被编译为共享对象。
是静态链接全有或全无的交易,还是有什么方法可以混合搭配?
【问题讨论】: