ios - 从intel到arm交叉编译一个库

标签 ios cross-compiling

我正在使用来自 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++ 库,它是 ofstd。 我收到 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。

关于ios - 从intel到arm交叉编译一个库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5832734/

相关文章:

android - 从 SQLite 切换到 Firebase?

ios - 将 UIScrollview 放入 View Controller ( Storyboard)

ios - 与 RestKit 同步

android - 构建独立库

c - 权限被拒绝 Hello world Yocto/Openembedded

ios - 使用 Swift 以编程方式加载图像

ios - Swift:无法在 SplitViewController 中调整 collectionViewCells 的大小

为 armhf 交叉编译 Apache Thrift 程序

linux - 如何以稳定的 Debian 为目标但在测试中开发?

android - 如何将 OpenSSL 构建为 Android 的未版本化共享库?