【发布时间】:2016-11-15 12:20:31
【问题描述】:
我有两个名为 libx.a 和 liby.a 的静态库。
libx.a 用gcc -g 编译;而liby.a 是用gcc -O3 编译的。
我想将它们两个链接到一个可执行文件中。
可行吗?
有害吗?
【问题讨论】:
-
我会说是的,没问题。
-
一般来说,优化是不应该影响代码接口的东西,只是将其实现更改为在空间或速度或其他方面更有效的东西。但是,编译器可能会对程序和环境做出额外的假设以优化它(例如,多线程是可能的)。我不知道一个很好的例子,但优化器可能会假设所有或没有代码都经过优化,从而阻止了互操作性。不过,这只是一个理论上的想法,我不知道是否有任何编译器实际上假设了这一点。所以是的,总的来说,它是可行的。
-
这样想。标准 C 库主要作为一个对象库来实现,并且在交付时进行了优化,但是运行与其链接的未优化程序是完全可以的。
-
只要ABI一样,为什么会有问题呢? ABI 中是否有任何迹象表明不同的优化级别可能使用不同的约定?
标签: c gcc linker compiler-optimization