我正在使用来自http://dicom.offis.de/dcmtk.php.en的开源c++库DCMTK。我已经成功地编译了这个库在Windows上使用vc++ IDE, MacOS Xcode, Mac iOS模拟器。但是我无法在iOS设备上编译这个库,因为它是基于ARM的架构。DCMTK库在Intel架构上编译得非常好。
现在我的问题陈述是:-
我需要在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环境变量设置为= $ PATH/gnu_arm/bin
为了配置DCMTK c++库,我在shell 上运行了以下命令CC=arm-elf-gcc CXX=arm-elf-g++ AR=arm-elf- arlib =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 dient, opendir(), closedir()调用。它包含了这些调用,但我在这个头文件中没有找到上述调用的任何定义。
2)当我编译另一个日志库时,我得到了以下错误错误:未在此范围内声明nthos错误:未在此范围内声明ntohl错误:未在此范围内声明hons错误:在此范围内未声明htonl。这些调用是网络调用,没有在GNU ARM工具的任何头文件中定义。
我尝试下载ARM二进制文件的源代码并提取tar文件,并尝试将丢失的头文件复制到Ubuntu上安装的GNU ARM。对于某些文件,它在对复制的头文件进行更改后编译,而对于某些文件,它再次给出编译错误。由于缺少一些标准头文件,DCMTK库下的每个文件都会出现编译错误循环。
请建议是否有其他工具链可以在Ubuntu 64位机器上进行ARM交叉编译。或者其他好的解决方案。
谢谢! !Amit
在交叉编译时存在许多问题。交叉编译有三个主要标志。-host, -target和-build。-host闪存是生成的二进制文件将在其中运行的机器。-build flash是将要编译的系统。-target标志用于构建将在交叉编译中使用的库。因此,如果您要构建自己的gcc工具链。所以在你的情况下,你不会设置目标标志,因为我们不是在构建一个工具链。东道主的旗帜将是臂精灵。-build标志将是amd64
如果常规c编译器和交叉编译器之间存在不一致,交叉编译通常会失败。我已经为avr32编译了几个库,使用由builroot生成的工具链,但在某些情况下(例如socat项目)这是不可能的。
您的主机,您的目标和CXX标志看起来正常。我认为没有必要放置AR标志(这是主机和目标选项的想法)。
另一方面,这是avr32的expat库的一个例子:
./configure --host=avr32-linux --prefix=/home/juan/builds/build_expat/ CC=avr32-linux-gcc
make; make install
我可以建议你尝试从ia32架构进行交叉编译。