如何在 iPhone 中编译 Eigen

Posted

技术标签:

【中文标题】如何在 iPhone 中编译 Eigen【英文标题】:How to compile Eigen in iPhone 【发布时间】:2011-09-17 08:38:23 【问题描述】:

我想编译 Eigen 并在具有 NEON 功能的 iPhone 中使用它。 ?是否需要针对特定​​的 ARM 芯片进行编译?我需要修改构建脚本吗?

干杯。

【问题讨论】:

【参考方案1】:

由于 ARM NEON 的显式矢量化在最新版本的 Eigen 中得到开箱即用的支持,我猜您根本不需要做任何特别的事情。手册中关于安装的部分内容如下:

要使用 Eigen,您只需要下载并提取 Eigen 的源代码(有关下载说明,请参阅 wiki)。事实上,Eigen 子目录中的头文件是使用 Eigen 编译程序所需的唯一文件。所有平台的头文件都相同。不需要使用 CMake 或安装任何东西。

总结:它是一个全头库。无需编译。

假设您设置了正确的工具链,您应该可以开始使用了。如果您使用的是受支持的编译器之一(我假设为 gcc),它应该自动检测要编译的优化(编辑:假设正确的编译器标志,例如 NEON 打开)。

至于如何为 iPhone 编译东西,好吧,关于这个话题我没有注意到 :D

【讨论】:

这不是那么简单 - Eigen 在不同的架构上使用各种技巧来实现矢量化。不确定这个技巧是否适用于 iPhone。 为什么不呢?使用受支持的编译器(例如 gcc)和正确的编译器标志(-mfpu=neon -mfloat-abi=softfp)应该自动检测 NEON 并使用显式 NEON 矢量化。它在常见问题解答中:eigen.tuxfamily.org/… 谢谢大家。我工作了几个小时,终于让它工作了。我使用xcode 4。需要在构建设置中使用armv7优化的arch,除此之外我需要按照Staffan所说的设置用户头搜索路径和编译标志。 我想不通的另一件事是,Eigen 头文件库有一些听者文件,而不使用 .h 扩展名。在 Xcode 4 中,我不能使用 #include 它们。我将这些文件修改为 .h 文件,它终于可以工作了。而且我必须在包含 Eigen 库之前定义 EIGEN_DONT_VECTORIZE。否则,它给了我 Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1 compile error。 gcc 包含文件没有问题,无论扩展名如何(例如:iostream),因此应该可以修复(您的包含路径中的文件吗?等等)。 EIGEN_DONT_VECTORIZE 有点违背了目的,因为您不会以这种方式获得(显式)矢量化。也许你很幸运,编译器为你表演了一些魔法,谁知道:)

以上是关于如何在 iPhone 中编译 Eigen的主要内容,如果未能解决你的问题,请参考以下文章

调用opencv时,使用Egien工具出现“error C2061: 语法错误: 标识符“Matrix””和“error C2653: “Eigen”:不是类或命名空间名称”该如何解决?

Eigen 的矢量化回退如何工作?

确保重新编译时处理定义

如何在 Eigen 中以 MarketIO 格式保存 Eigen::DiagonalMatrix?

Eigen 程序无法从 Visual Studio 编译,但从命令行编译成功

如何在 Eigen C++ 中加速 LU 分解?