【问题标题】:Is it viable to mix two static libraries with different optimization levels?混合两个具有不同优化级别的静态库是否可行?
【发布时间】:2016-11-15 12:20:31
【问题描述】:

我有两个名为 libx.aliby.a 的静态库。

libx.agcc -g 编译;而liby.a 是用gcc -O3 编译的。

我想将它们两个链接到一个可执行文件中。

可行吗?

有害吗?

【问题讨论】:

  • 我会说是的,没问题。
  • 一般来说,优化是不应该影响代码接口的东西,只是将其实现更改为在空间或速度或其他方面更有效的东西。但是,编译器可能会对程序和环境做出额外的假设以优化它(例如,多线程是可能的)。我不知道一个很好的例子,但优化器可能会假设所有或没有代码都经过优化,从而阻止了互操作性。不过,这只是一个理论上的想法,我不知道是否有任何编译器实际上假设了这一点。所以是的,总的来说,它是可行的。
  • 这样想。标准 C 库主要作为一个对象库来实现,并且在交付时进行了优化,但是运行与其链接的未优化程序是完全可以的。
  • 只要ABI一样,为什么会有问题呢? ABI 中是否有任何迹象表明不同的优化级别可能使用不同的约定?

标签: c gcc linker compiler-optimization


【解决方案1】:

是的,它是可行的,只要优化不改变 ABI(函数调用或浮点算术/表示等),它就不会有害。尽管即使在这些情况下,我相信所有必要的信息都已编译或链接器解决了问题。

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 2011-06-26
    相关资源
    最近更新 更多