我想评估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作为一个傻瓜的差事?任何指导都将不胜感激。
答案 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);
您可能会考虑的其他资源:
我会发布更多资源,但我的帐户只允许其中两个...