Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找到使用gcc-4.9和gcc-6.2构建的库的二进制兼容性?_Gcc_Abi_Toolchain - Fatal编程技术网

如何找到使用gcc-4.9和gcc-6.2构建的库的二进制兼容性?

如何找到使用gcc-4.9和gcc-6.2构建的库的二进制兼容性?,gcc,abi,toolchain,Gcc,Abi,Toolchain,我有一个供应商谁提供的SoC,相关的BSP和一些关键的中间件给我们。供应商使用gcc-4.9构建所有交付的软件 交付的软件分为两类 源代码包:我们获取所有源代码并构建自己 库和二进制文件:我们重用供应商提供的预构建内容 我们计划迁移到gcc-6.2,但供应商近期没有迁移的计划 因此,问题出现了: 对于预构建的二进制文件/库,如果我们使用gcc-6.2,并且供应商提供带有gcc-4.9的预构建文件,则会出现ABI兼容性问题。所有预构建的lib都是共享对象 当我们使用gcc-6.2重新构建时,我

我有一个供应商谁提供的SoC,相关的BSP和一些关键的中间件给我们。供应商使用gcc-4.9构建所有交付的软件

交付的软件分为两类

  • 源代码包:我们获取所有源代码并构建自己
  • 库和二进制文件:我们重用供应商提供的预构建内容
我们计划迁移到gcc-6.2,但供应商近期没有迁移的计划

因此,问题出现了:

  • 对于预构建的二进制文件/库,如果我们使用gcc-6.2,并且供应商提供带有gcc-4.9的预构建文件,则会出现ABI兼容性问题。所有预构建的lib都是共享对象
  • 当我们使用gcc-6.2重新构建时,我们是否会期望供应商的源程序包(某些程序包具有c和汇编)出现编译时问题

    • 目标架构是ARM
    • 我们正在组装一个Linux发行版
  • 我了解到,我正在考虑对所有供应商交付的预构建(使用4.9构建)和我使用6.2构建的对象运行abicheck

    • 如果这是正确的方法,有什么建议吗
    • 其他建议也同样受欢迎

    什么是SoC的CPU体系结构,什么是操作系统,是linux吗?GCC ABI有变化,为了运行新GCC编译的代码,通常应该使用新的LIBS,尤其是C++。在linux中,您可以使用两组具有某种chroot的lib。如果可以为您的平台编译较新的libs,您可以尝试安装较新的libs并运行较旧的二进制文件。这是arm架构。运行linux。这些预构建都是由供应商用C编写的。如果都是C代码,你就可以了,C ABI变化不大。然而,ARM有新旧ABI,FPU的选择也不同。您可能正在使用较新的ABI和VFP浮点数学,但您需要确保旧版本和新版本的GCC都同意这些观点。ABI检查可能与您的问题无关,它不会诊断由ABI差异引起的问题。它更像是一个正确性检查程序,以确保您没有做一些程序认为不正确的事情,例如使用共享库中的私有符号或静态链接。@RossRidge,感谢您在abicheck上的输入。