交叉从英特尔编译库到arm
我正在使用来自http://dicom.offis.de/dcmtk.php.en的开源C ++库DCMTK。 我已经在Windows上使用VC ++ IDE,MacOS Xcode,Mac iOS模拟器成功编译了这个库。 但是我不能在iOS设备上编译这个库,因为它是基于ARM的体系结构。 DCMTK库在英特尔架构上编译得非常好。
现在我的问题是:
我需要通过交叉编译在ARM架构上编译这个DCMTK C ++库。 我正在使用Ubuntu 64位机进行交叉编译。 我从http://www.gnuarm.com/的 GNU ARM工具链安装了二进制文件。我使用GCC工具链4.0 binutils-2.16.1,gcc-4.0.2-c-c ++,newlib-1.14.0,insight- 6.4,TAR BZ2 [65.5MB]用于Ubuntu 64位机器的二进制文件,用于ARM交叉编译。
在Ubuntu上安装这些二进制文件后,我将PATH环境variables设置为PATH = $ PATH / gnu_arm / bin
为了configurationDCMTK C ++库,我在shell上运行以下命令
CC = arm-elf-gcc CXX = arm-elf-g ++ AR = arm-elf-ar RANLIB = arm-elf-ranlib ARFLAGS = cruv ./configure -prefix = $ home_dicom -target = arm-elf -host = arm- elf -enable-std-includes -disable-threads
它会正确创build一个make文件。 现在我试图通过使用make命令来编译代码,但面对如此多的编译错误,如: – 1)我试图编译我的第一个依赖的C ++库。 我得到了DIR *,struct dirent,opendir(),closedir()调用的错误。 它包括这些调用,但是我没有在这个头文件中find上述调用的任何定义。
2)当我编译另一个库的日志我得到了如下错误,如错误:nthos没有在此范围内声明错误:ntohl没有在此范围内声明错误:htons没有在此范围内声明错误:htonl没有在此范围内声明。 这些调用是networking调用,并没有在任何来自GNU ARM工具的头文件中定义。
我尝试下载ARM二进制文件的源代码,并提取tar文件,并尝试将缺less的头文件复制到Ubuntu上安装的GNU ARM。 对于某些文件,在对复制的头文件进行更改之后编译,并且对于某些文件又会出现编译错误。由于某些标准头文件丢失,DCMTK库下的每个文件都存在编译错误循环。
请在Ubuntu 64位机器上build议是否有任何其他工具链可用于ARM交叉编译。 或者除此之外的其他任何好的解决scheme。
谢谢!!! 阿米特
交叉编译有许多问题。 交叉编译有三个主要标志。 -host,-target和-build。 -host flash是生成的二进制文件在其中运行的机器。 -build flash是您要编译的系统。 -target标志用于构build将在交叉编译中使用的库。 所以,如果你要build立自己的gcc工具链。 所以在你的情况下,你不会设置目标标志,因为我们不build立一个工具链。 -host标志将是小精灵。 -build标志将是amd64。
如果常规c编译器和交叉编译器之间不一致,通常交叉编译会失败。 我已经编译了avr32的几个库,由buildroot生成了一个工具链,但在某些情况下(例如socat项目),这是不可能的。
您的主机,您的目标和CXX标志看起来没问题。 我认为没有必要把AR标志(这是与主机和目标选项的想法)。
另一方面,这是avr32的expat库的一个例子:
./configure --host=avr32-linux --prefix=/home/juan/builds/build_expat/ CC=avr32-linux-gcc make; make install
我可以推荐你尝试从ia32架构进行交叉编译。 过去我曾经遇到过这个Ubuntu的一些问题。