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

时间:2012-03-01 10:03:22

标签: c static-libraries vxworks powerpc

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

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

这取决于每个选项:显然,平台和架构选项必须相同。 另一个例如优化,调试,分析可能是不同的。

想象一下,一个库可能是由外部开发人员提供的,所以,你真的不知道他是如何编译它的,只是平台和架构要求。

答案 2 :(得分:0)

  

此外,目前我尝试确保编译器选项与产品的选项相同。有必要吗?

“2。必要 - 。实际上,大多数库可以被认为是独立的并且不依赖于任何特定产品(即它们可以从许多产品中使用)。因此,每个产品特定标志不属于库,反之亦然(编译产品对象时不应出现特定于库实现的标志)。