【问题标题】:Skipping incompatible error when linking链接时跳过不兼容的错误
【发布时间】:2010-08-23 18:32:28
【问题描述】:

我正在使用英特尔 C 编译器在 64 位架构上进行编译。相同的代码在不同的 64 位英特尔架构上构建良好。

现在,当我尝试构建二进制文件时,我收到一条消息“跳过不兼容的 ../../libtime.a”或类似的东西,这表明我存档的 libtime.a(来自我的一些目标文件编译)不兼容。我用谷歌搜索,似乎这通常是 32->64 位转换或类似的结果,但英特尔 C 编译器在编译时似乎不支持 -64 或其他一些内存选项。如何排查和修复此错误?

【问题讨论】:

标签: c compiler-errors intel


【解决方案1】:

您不能混合使用 64 位和 32 位编译代码。 Linux are here的配置说明。

【讨论】:

  • +1 实际上,Derek 似乎正在尝试将 32 位库与 64 位库链接。
  • 原来系统是 IA-64,不知何故有人在上面安装了 32 位编译器。直到我对创建的目标文件做了一个“文件”,这对我来说并不明显。
【解决方案2】:

您需要确定库和正在构建的新代码的目标处理器。这可以通过几种方式完成,但最简单的是:

$ objdump -f ../../libtime.a otherfile.o

对于 libtime,这可能会打印出一堆东西,但它们都应该具有相同的目标处理器。确保 otherfile.o(您应该替换其中一个目标文件)也具有相同的架构。

gcc 具有 -m32 和 -m64 标志,用于从默认目标切换到具有不同寄存器和内存宽度(通常为 x86 和 x86_64)的类似处理器,英特尔 C 编译器也可能具有这些标志。

如果这没有帮助,那么您应该包括用于编译所有内容的命令(带有所有标志)以及有关运行每个命令的系统的信息。

【讨论】:

  • 感谢提示,这次不是问题,但我会记住 objdump 命令
猜你喜欢
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 2013-03-30
  • 1970-01-01
  • 2013-06-09
  • 2011-03-08
相关资源
最近更新 更多