我正在使用http://dicom.offis.de/dcmtk.php.en的开源C++库DCMTK。
我已经使用VC++ IDE,MacOS Xcode,Mac iOS模拟器在Windows上成功编译了该库。
但是我无法在iOS设备上编译该库,因为它是基于ARM的体系结构。
DCMTK库在Intel架构上编译良好。
现在我的问题陈述是:
我需要通过交叉编译在ARM体系结构上编译此DCMTK C++库。
我正在使用Ubuntu 64位计算机进行交叉编译。
我已经从http://www.gnuarm.com/安装了GNU ARM工具链中的二进制文件
我正在使用Ubuntu 64位计算机的GCC工具链4.0 binutils-2.16.1,gcc-4.0.2-c-c ++,newlib-1.14.0,insight-6.4,TAR BZ2 [65.5MB]二进制文件进行ARM交叉编译。
在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++库,即std。
DIR *,struct dirent,opendir(),closedir()调用出现错误。
它包括这些调用,但在此头文件中没有找到上述调用的任何定义。
2)当我编译另一个日志库时,出现以下错误,例如
错误:在此范围内未声明nthos
错误:在此范围内未声明ntohl
错误:在此范围内未声明htons
错误:在此范围内未声明htonl。
这些调用是网络调用,未在GNU ARM工具的任何头文件中定义。
我尝试下载ARM二进制文件的源代码并提取了tar文件,并尝试将丢失的头文件复制到Ubuntu上已安装的GNU ARM。
对于某些文件,它在更改复制的头文件后进行编译,而对于另一些文件,则再次出现编译错误。由于缺少一些标准头文件,因此DCMTK库下存在的每个文件都会出现编译错误循环。
请建议在Ubuntu 64位计算机上是否还有其他工具可用于ARM交叉编译。
或除此以外的任何其他好的解决方案。
谢谢!!!
阿米特
最佳答案
涉及交叉编译时,存在很多问题。交叉编译有三个主要标志。 -host,-target和-build。 -host flash是将在其上运行生成的二进制文件的计算机。 -build flash是您要在其中进行编译的系统。 -target标志用于构建将在交叉编译中使用的库。因此,如果您要构建自己的gcc工具链。因此,在您的情况下,您将不会设置目标标记,因为我们没有构建工具链。 -host标志将是arm-elf。而-build标志将是amd64。