Eigen示例代码无法进行ARM裸机编译

时间:2017-02-24 16:37:59

标签: c++ eigen bare-metal

我想评估Eigen的裸机ARM系统。以下是我尝试编译的内容:

#include <Eigen/Dense>
using Eigen::MatrixXd;

void test()
{
  MatrixXd m(2,2);
  m(0,0) = 3;
  m(1,0) = 2.5;
  m(0,1) = -1;
  m(1,1) = m(1,0) + m(0,1);
}

汇编给了我这个:

phil@Mint-Virtual ~/Projects/Eigen $ /usr/bin/arm-none-eabi-g++ -I ./eigen-eigen-3.3.3 test.cpp -o test.o
In file included from ./eigen-eigen-3.3.3/Eigen/Dense:1:0,
                 from test.cpp:5:
./eigen-eigen-3.3.3/Eigen/Core:66:17: fatal error: new: No such file or directory
compilation terminated.

我是C程序员,而不是C ++,但我知道这是一个库问题。我已经看过几个关于在裸机系统上使用C ++的参考文献,但坦率地说,我仍然对如何继续进行有点困惑。我想要删除缺少的东西,这似乎是malloc(),free()等等,这样我就可以获得成功的编译。我已尝试在编译器调用中使用 new.h -nostdinc ++ -include new.h ,但这不起作用。

我犯了一个简单的错误,还是试图在这种环境中使用Eigen作为一个傻瓜的差事?任何指导都将不胜感激。

2 个答案:

答案 0 :(得分:2)

裸机系统没有内存分配器,因此无法使用new和delete。 使用固定大小矩阵的代码应该有效:

#define EIGEN_NO_MALLOC
#include <Eigen/Dense>
using Eigen;

void test()
{
    Matrix2d m;
    m(0,0) = 3;
    m(1,0) = 2.5;
    m(0,1) = -1;
    m(1,1) = m(1,0) + m(0,1);
}

答案 1 :(得分:1)

我们在裸机代码中大量使用 Eigen C ++ ARM系统。你的问题显然是一般相关的 内存分配不是Eigen本身。 但是,您可以在基本形式中实现此功能以使用大部分内容 固定大小的C ++构造,带有一些简单的模型 删除。我们使用了如下构造:

$spg = DB::table('person_competition_statistics as pcs')
                    ->where('pcs.competitionId', $competitionId)
                    ->where('pcs.teamId', $teamId)
                    ->orderBy('pcs.sStealsAverage', 'desc')
                    ->join('players as player', 'pcs.personId', '=',  'player.personId')
                    ->select(['pcs.personId', 'pcs.sStealsAverage', 'player.firstName', 'player.familyName', 'player.playingPosition', 'player.image_thumb'])
                    ->get();

$spg = $spg->unique('personId');
$spg = array_slice($spg->values()->all(), 0, 5, true);

您可能会考虑的其他资源:

我会发布更多资源,但我的帐户只允许其中两个...