我正在尝试交叉编译 RaspberryPi 目标系统的某些依赖库,并且主机系统是具有 GCC 编译器的Linux。例如,假设这些库之一依赖于链接阶段,并与系统的静态或动态库之一链接。 链接器如何解决这种情况? (由于目标系统上的这些 .a 或 .so 文件可能不同,因此在这种情况下 RaspberryPi 上的程序可能会崩溃)。如何使其以正确的方式工作?
答案 0 :(得分:1)
交叉编译器提供的构建环境被更准确地描述为交叉工具链。它需要提供您所需的一切:不仅是编译器,而且还包括汇编程序,链接程序以及所有运行时支持库。其中包括一个C库(也许是glibc,也许还有其他东西),GCC运行时库(libgcc和libgcc_s)和C ++运行时库(libstdc ++)。但是构建环境还需要软件需要构建的所有库的副本,通常是目标文件的头文件和静态库或动态共享对象。特别是,您不能在主机上使用已安装的头文件,因为它们可能对目标有错误的定义和声明。
某些程序员只是将其依赖项(不是系统库)复制到其源代码树中,以便使跨构建环境保持最小。但是随后,必须将这些库作为项目的一部分进行跟踪和更新,这可能很麻烦。