首页 > 解决方案 > 与系统库动态或静态链接的库的交叉编译

问题描述

我正在尝试为RaspberryPi目标系统交叉编译一些依赖库,主机系统是带有GCC编译器的 Linux。例如,假设其中一个库依赖于链接阶段并与系统的静态或动态库之一链接。链接器如何解决这种情况?(因为这些.a.so文件在目标系统上可能不同,因此在这种情况下, RaspberryPi上的程序可能会崩溃)。如何让它以正确的方式工作?

标签: gccraspberry-pig++cross-compilingld

解决方案


交叉编译器提供的构建环境更准确地描述为cross-toolchain。它需要提供您需要的一切:不仅是编译器,还包括汇编器、链接器和所有运行时支持库。这包括一个 C 库(可能是 glibc,也可能是其他东西)、GCC 运行时库(libgcc 和 libgcc_s)和 C++ 运行时库(libstdc++)。但是构建环境还需要您的软件需要构建的所有库的副本,通常包括头文件和静态库或目标的动态共享对象。特别是,您不能在主机上使用已安装的头文件,因为它们可能对目标有错误的定义和声明。

一些程序员只是将他们的依赖项(不是系统库)复制到他们的源代码树中,这样交叉构建环境就可以保持最小。但是这些库必须作为项目的一部分进行跟踪和更新,这可能很麻烦。


推荐阅读