C的交叉编译要求

Bur*_*rak 7 c arm cross-compiling

我有一些关于编译C的基本知识,但需要回答一些通用的交叉编译问题.就我而言,我试图在我的Fedora Linux机器上交叉编译一个程序,该程序将在ARM单板计算机上运行.

  1. 我的第一个问题是关于标题.我已下载arm Linux工具包,它包含一个包含目录中的头文件,如stdio.h.当我交叉编译时,我是否应该使用这个"目标"包含目录而不是我的系统包含目录?或者可以指向我的系统包括目录,例如/ usr/include?(当我对它们进行区分时,这些头文件似乎有所不同.)

  2. 如果头文件不存在会发生什么.就我而言,我还计划在ARM板上使用cURL库.我可以简单地指向我下载的curl源包中的include目录而不用担心目标体系结构吗?如果是,这是否意味着我的第一个问题无关紧要?

  3. 假设我想静态链接到库.在发生这种情况之前,是否需要为目标ARM平台编译此静态库?或者我可以直接使用系统上安装的静态库(希望交叉编译过程能够处理业务)吗?

  4. 如果我决定动态链接到库,唯一的要求是目标系统将此库编译为ARM并安装在ARM板上的一个LD_LIBRARY_PATH目录中,我是否正确?

谢谢您的帮助.

Yan*_*min 10

  1. 始终使用目标标头.它们可能与您的主机标头不同.编译器应该已经将它们作为标准问题的默认包含路径的一部分,例如libc.
  2. 您需要使用交叉编译器将cURL构建到虚假的"目标"系统目录中,并使用cURL在此目标目录中构建应用程序.因为你需要一个cURL库,你必须使用交叉编译器.对于非交叉编译友好的编译(例如构建程序并在编译过程中运行),您将需要修改构建过程.有时fakeroot可能对脏构建系统有帮助.
  3. 您不能随意将静态库用于系统中的其他体系结构.它们必须由交叉编译器构建.
  4. 不正确.图书馆通常必须存在.