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

标签 c gcc static linker

我有一个生成十个可执行文件的 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/

相关文章:

c - 测试 C 中 fgets 中的输入是整数还是符号

c - 为什么 "strupr"的这个实现不起作用?

java - 数组的 ArrayList 不断用添加的最新数组覆盖我以前的数组

c - 无法运行已编译的C+Gtk+-3软件

需要 Cooja 技术信息

c - 靶心覆盖率,代码覆盖率为 0%

c - fork 为这个 c 程序生成不正确的输出?

java - java中的多线程静态方法

c++ - 静态常量对象

c++ - 定义 long long int 数组