与系统库动态或静态链接的库的交叉编译

Cross compilation of libraries that dynamically or statically linked with system libraries

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

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

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