我有一点奇怪的问题。我通常使用CLion IDE来编译和运行代码,但我想利用分析器来尝试优化我的软件,而CLion不包含分析器扩展。所以我需要在命令行编译和运行。
好的,没有问题,但出于某些原因,当我这样做时,我在加载以arma_binary形式保存的稀疏矩阵时出错(Armadillo文档声明这是稀疏矩阵唯一可能的文件格式)。
以下是保存为main.cpp
的示例脚本:
#include <iostream>
#include <armadillo>
using namespace std;
using namespace arma;
void DenseMult (mat& I, mat& B);
void SparseMult (sp_mat& I, mat& B);
int main() {
mat Int; Int.load("intMatDense.mat");
cout << Int.n_cols << endl;
sp_mat IntSp; IntSp.load("intMatSparse.mat", arma_binary);
cout << IntSp.n_cols << endl;
mat B; B.load("biomassMat.mat");
DenseMult(Int, B);
SparseMult(IntSp, B);
return 0;
}
void DenseMult (mat& I, mat& B) {
I * B;
}
void SparseMult (sp_mat& I, mat& B) {
I * B;
}
在CLion中构建和运行时,它给出了以下输出:
/home/jack/CLionProjects/Optimization/cmake-build-debug/Optimization
307
307
Process finished with exit code 0
到目前为止一直很好,但是当我这样做时(我认为是)在命令行中也一样:
jack@jack-MacBookPro:~/CLionProjects/Optimization$ g++ main.cpp -o main -O2 -larmadillo
jack@jack-MacBookPro:~/CLionProjects/Optimization$ ./main
我得到以下输出:
307
warning: SpMat::load(): inconsistent data in intMatSparse.mat
0
error: matrix multiplication: incompatible matrix dimensions: 0x0 and 307x3
terminate called after throwing an instance of 'std::logic_error'
what(): matrix multiplication: incompatible matrix dimensions: 0x0 and 307x3
Aborted (core dumped)
我是否有可能以不同的方式链接到Armadillo库以访问稀疏矩阵功能?
提前致谢。
杰克