c - 静态库是否应该始终使用与应用程序相同的编译器选项来构建?

标签 c static-libraries vxworks powerpc

我们有一个可重用的库,可以交付给多个产品。大多数产品都是在VxWorks下并使用gcc编译器。但是,它们每个都将采用不同的架构,例如 PPC、MIPS,并且 PPC 本身还有更多类型,例如 8531、8620 等。

目前,我正在为每个板分别构建静态库并提供。无论如何,是否可以构建一个可以在所有这些不同架构中使用的通用库?

此外,目前我尝试确保编译器选项与产品相同。有必要吗?互联网上是否有任何信息可以对静态库和应用程序的哪些选项对于保持相同的重要性进行分类?

最佳答案

  1. 没有其他方法 - 您必须为每个平台构建库(静态或非静态)。 您可能已经知道静态库实际上只是存储大量目标文件的容器。每个目标文件都包含特定于库构建平台的二进制代码(阅读:不同的汇编指令集)。
  2. 是的,在构建库和使用该库的二进制文件(程序)时保持相同的编译器选项是非常好的做法。这样您就可以避免潜在的非常棘手的问题。一些优化选项是二进制不兼容的(例如:您可以在库中编译一个函数,并进行优化,使其通过寄存器返回(或期望)数据),但您的主程序可能期望该函数通过地址返回它堆栈 - 大麻烦。

关于c - 静态库是否应该始终使用与应用程序相同的编译器选项来构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9514150/

相关文章:

c - 这些系统调用有什么问题?

c++ - Visual Studio C++ 中的静态和动态库链接

c - vxworks串口读取超时

vxworks - 有关 VxWorks 的良好信息来源?

c - RAM_HIGH_ADRS 在 VxWorks BSP 中的真正含义是什么?

c - Double 作为困惑数字返回

c - AltiVec vec_ld() 是否仅适用于 16 字节对齐的变量?

objective-c - 在 Objective C 中从源文件创建 .dylib 动态库

c++ - Android Studio 2.2链接opencv静态库

c - 在套接字中使用 fork() 调用后服务器未退出