交叉编译从intel到arm的库

时间:2011-04-29 13:32:42

标签: ios cross-compiling

我正在使用来自http://dicom.offis.de/dcmtk.php.en的开源C ++库DCMTK。 我已经使用VC ++ IDE,MacOS Xcode,Mac iOS模拟器在Windows上成功编译了这个库。 但是我无法在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交叉编译。< / p>

在Ubuntu上安装这些二进制文件后,我已将PATH环境变量设置为 PATH = $ PATH / gnu_arm / bin

为了配置DCMTK 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

它可以正确创建一个make文件。现在我尝试使用make命令编译代码,但面临如此多的编译错误,如: - 1)我试图编译我的第一个依赖的C ++库。 我得到了DIR *,struct dirent,opendir(),closedir()调用的错误。 它包括这些调用,但我没有在此头文件中找到上述调用的任何定义。

2)当我编译另一个loglog库时,我得到了以下错误: 错误:未在此范围内声明nthos 错误:未在此范围内声明ntohl 错误:未在此范围内声明htons 错误:未在此范围内声明htonl。 这些调用是网络调用,并未在GNU ARM工具的任何头文件中定义。

我尝试下载ARM二进制文件的源代码并解压缩tar文件并尝试将丢失的头文件复制到Ubuntu上安装的GNU ARM。 对于某些文件,它在对复制的头文件进行更改后进行编译,对于某些文件,它会再次出现编译错误。由于某些标准头文件丢失,DCMTK库下的每个文件都存在编译错误循环。

请在Ubuntu 64位计算机上建议是否有可用于ARM交叉编译的其他工具链。 或者除此之外的任何其他好的解决方案。

谢谢! 阿米特

2 个答案:

答案 0 :(得分:1)

交叉编译时存在许多问题。交叉编译有三个主要标志。 -host,-target和-build。 -host flash是生成二进制文件的机器。 -build flash是您要编译的系统。 -target标志用于构建将用于交叉编译的库。所以,如果你要构建自己的gcc工具链。因此,在您的情况下,您不会设置目标标记,因为我们没有构建工具链。 -host标志将是arm-elf。 -build标志将是amd64。

答案 1 :(得分:0)

如果常规c编译器和交叉编译器之间存在不一致,通常交叉编译会失败。我已经使用buildroot生成的工具链为avr32编译了几个库,但在某些情况下(例如socat项目),它是不可能的。

您的主机,目标和CXX标记看起来不错。我认为没有必要放置AR标志(这是主机和目标选项的想法)。

另一方面,这是avr32的expat库的一个例子:

./configure --host=avr32-linux --prefix=/home/juan/builds/build_expat/ CC=avr32-linux-gcc
make; make install 

我可以推荐尝试从ia32架构交叉编译的人。我过去曾经遇到过ubuntu的几个问题。