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

C 静态库是否应始终使用与应用程序相同的编译器选项构建?,c,static-libraries,vxworks,powerpc,C,Static Libraries,Vxworks,Powerpc,我们有一个可重复使用的库,可以传递给多个产品。大多数产品都在VxWorks中,并使用gcc编译器。但是,它们中的每一个都将在不同的体系结构上,如PPC、MIPS,而在PPC本身中有更多的类型,如8531、8620等 目前,我正在分别为这些板构建静态LIB,并提供。是否可以构建一个公共库,它可以跨所有这些不同的体系结构使用 此外,目前我试图确保编译器选项与产品的选项相同。有必要吗?互联网上是否有任何信息可以分类哪些选项对维护静态库和应用程序相同很重要?这取决于每个选项:显然,平台和体系结构选项必须

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

目前,我正在分别为这些板构建静态LIB,并提供。是否可以构建一个公共库,它可以跨所有这些不同的体系结构使用


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

这取决于每个选项:显然,平台和体系结构选项必须相同。 另一种方法,如优化、调试和分析,可能会有所不同

假设一个库可能是由外部开发人员提供的,所以,您不知道他是如何编译它的,只知道平台和体系结构需求

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

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

    1。请注意,OSX支持“fat”二进制文件,并且工具链支持fat静态库中的链接(除了
    ar
    不支持),因此您可以创建一个“通用”库,但仍然需要分别为每个体系结构构建。