【问题标题】:How to use Eigen, the C++ template library for linear algebra?如何使用 Eigen,线性代数的 C++ 模板库?
【发布时间】:2011-03-16 11:37:04
【问题描述】:

我有一个由矩阵组成的图像处理算法,我有自己的矩阵运算代码(乘法、逆...)。但是我使用的处理器是 ARM Cortex-A8 处理器,它具有 NEON 协处理器进行矢量化,因为矩阵运算是 SIMD 运算的理​​想情况,我要求编译器 (-mfpu=neon -mfloat-abi=softfp) 生成 NEON我的代码的指令,但编译器没有这样做,然后我还尝试为 Matrix 操作编写自己的 NEON 内在代码,但我发现这样做非常困难。

所以,我想到了使用承诺矩阵运算矢量化的Eigen 库。因此,我立即下载了 Eigen C++ 库并尝试按照他们的教程中的说明使用它,但不幸的是,当我运行他们的 example programs 时,我得到了编译错误

任何有使用 Eigen 经验的人,任何示例都会真正有帮助吗?请帮助我如何去做。

救命!

谢谢


我的 Eigen 文件夹位于:/home/ubuntu/Documents/eigen 我在 Eclipse 的 C++ 项目的附加目录中设置了此路径。然后我运行以下程序(示例)-

#include <Eigen/Core>

// import most common Eigen types
USING_PART_OF_NAMESPACE_EIGEN

int main(int, char *[])
{
  Matrix3f m3;
  m3 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
  Matrix4f m4 = Matrix4f::Identity();
  Vector4i v4(1, 2, 3, 4);

  std::cout << "m3\n" << m3 << "\nm4:\n"
    << m4 << "\nv4:\n" << v4 << std::endl;
}

我得到的错误 -

构建项目Test_Eigen的配置Debug ****

全部搞定

构建文件:../main.cpp

调用:Sourcery G++ C++ 编译器

arm-none-linux-gnueabi-g++ -I/home/ubuntu/Documents/eigen -O0 -g3 -Wall -c -fmessage-length=0 -fcommon -MMD -MP -MF"main.d" - MT"main.d" -mcpu=cortex-a8 -marm -o"main.o"

"../main.cpp"

../main.cpp:6: 错误: 'int' 之前的预期构造函数、析构函数或类型转换 make: *** [main.o] 错误 1

【问题讨论】:

  • 如果您不发布遇到的特定错误,我们将无法帮助您。
  • 编译错误是什么?
  • 您是否从您的链接中检查了编译器支持和依赖性?
  • 抱歉各位,我刚刚编辑了问题,请再看一遍问题。谢谢。
  • 为什么这被标记为与 C 相关?

标签: c++ matrix simd eigen


【解决方案1】:

USING_PART_OF_NAMESPACE_EIGEN 宏在 Eigen 3 中是 removed。相反,只需使用

using namespace Eigen;

显然,教程已经过时了。

【讨论】:

  • 是的,Thomas 的教程确实已经过时了。现在它运作良好。感谢您的快速回复,节省了很多时间。
【解决方案2】:

我使用的是 Ubuntu 17.04,这对我有用
第一:
我在eigen official site 下载了 egien3.3.3。解压到一个名为 eigen 的目录中,cd 进去。
第二:
一个一个地运行下面的命令或者把它们做成一个xxx.sh文件一次运行。

#!/bin/bash
#eigen3 install
#from: http://eigen.tuxfamily.org/index.php?title=Main_Page
#download the package like eigen-eigen-67e894c6cd8f.tar.gz 

mkdir build
cd build
cmake -DEIGEN_TEST_NO_OPENGL=1 .. 
make 
sudo make install

最后:
做个测试

#include <eigen3/Eigen/Core>
#include <iostream>

// import most common Eigen types
//USING_PART_OF_NAMESPACE_EIGEN
using namespace Eigen;
using namespace std;
int main(int, char *[])
{
  Matrix3f m3;
  m3 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
  Matrix4f m4 = Matrix4f::Identity();
  Vector4i v4(1, 2, 3, 4);

  cout << "m3\n" << m3 << "\nm4:\n"
    << m4 << "\nv4:\n" << v4 << endl;
}

注意:
要查找您的安装结果,请参阅 /usr/local/include/eigen3/
如果有任何变化,请查看mytinx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-03
    • 2014-02-25
    • 2010-09-28
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多