使用一种编译器创建的静态 c 库是不是与另一种兼容?

Posted

技术标签:

【中文标题】使用一种编译器创建的静态 c 库是不是与另一种兼容?【英文标题】:Are static c libraries created with one compiler compatible with another?使用一种编译器创建的静态 c 库是否与另一种兼容? 【发布时间】:2013-10-15 11:28:00 【问题描述】:

在我的例子中,我有一个使用代码 sourcery gcc 构建的库,针对 arm cortex-m4。然后我试图将该库链接到使用 IAR 编译器编译的项目中。

是否可以这样做,还是必须使用新工具重建库?哪些因素会影响这一点?

【问题讨论】:

【参考方案1】:

静态库是几个目标文件的捆绑包,这些文件总是特定于编译器的。因此,如果您尝试将基于 gcc 的库与 IAR 编译器链接,由于要链接的目标文件格式不匹配,您将在编译时出错。

您需要使用 IAR 重建您的库。

【讨论】:

@Brandon Yates 请检查 Lindydancer 给出的答案,并让我们知道它是否有效。我没有可用的所有资源进行交叉检查,否则我会在最后完成。他提供的技术对我来说是全新的,所以我非常有兴趣知道这是否可能..提前谢谢。【参考方案2】:

用于 ARM 的 IAR 编译器支持 AEABI 格式,允许您使用一个编译器编译文件并与另一个编译器链接。

如果您使用 GCC 构建了库并启用了 AEABE,则应该可以在使用 IAR 工具的项目构建中使用静态库。

【讨论】:

以上是关于使用一种编译器创建的静态 c 库是不是与另一种兼容?的主要内容,如果未能解决你的问题,请参考以下文章

动态库和静态库的创建

Linux下gcc生成和使用静态库和动态库详解

Linux下Gcc生成和使用静态库和动态库详解

VS Code编译编译C代码的另一种方法

VS Code编译编译C代码的另一种方法

C库的制作