简体   繁体   English

使用Armadillo矩阵库时,使用c ++代码生成文件

[英]Makefile for a c++ code while using Armadillo matrix library

I have installed Armadillo linear algebra library to do some matrix operations on Linux mint OS. 我已经安装了Armadillo线性代数库来在Linux模拟操作系统上进行一些矩阵操作。 but,my bad is,i can't compile and execute my c++ code using makefile: 但是,我的坏处是,我无法使用makefile编译和执行我的c ++代码:

my makefile is as follows: 我的makefile如下:

CC=g++
all: file_1.o main.o
    $(CC)  -o EXCUTE_ALL file_1.o main.o

main.o: main.cpp file_1.h
    $(CC) -c main.cpp

file_1.o: file_1.h
    $(CC) -c file_1.cpp

#running    
run : 
    ./EXCUTE_ALL

.PHONY: clean   
clean:
    rm -f *.o
    rm -f EXCUTE_ALL

file_1.cpp is: file_1.cpp是:

#include <iostream>
#include <stdio.h>
#include "armadillo"
#include "file_1.h"
using namespace std;
using namespace arma;

mat myclass::product(mat my_matrix)
{
    mat product=my_matrix * my_matrix;
    return product;
}

file_1.h is: file_1.h是:

#include <iostream>
#include <stdio.h>
#include "armadillo"

using namespace std;
using namespace arma;

class myclass{
public:
    mat product(mat matrixAA);
};

Main.cpp is: Main.cpp是:

#include <iostream>
#include <stdio.h>
#include "armadillo"
#include "file_1.h"
using namespace std;
using namespace arma;

int main() 
{
    myclass matfile;
    mat BB;
    mat AA=randu<mat>(500,500);
    BB=matfile.product(AA);
    return 0;
}

and get the following error: 并得到以下错误:

file_1.o: In function `void arma::blas::gemv<double>(char const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)':
file_1.cpp:(.text._ZN4arma4blas4gemvIdEEvPKcPKiS5_PKT_S8_S5_S8_S5_S8_PS6_S5_[void arma::blas::gemv<double>(char const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)]+0x53): undefined reference to `wrapper_dgemv_'
file_1.o: In function `void arma::blas::gemm<double>(char const*, char const*, int const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)':
file_1.cpp:(.text._ZN4arma4blas4gemmIdEEvPKcS3_PKiS5_S5_PKT_S8_S5_S8_S5_S8_PS6_S5_[void arma::blas::gemm<double>(char const*, char const*, int const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)]+0x61): undefined reference to `wrapper_dgemm_'
collect2: ld returned 1 exit status
make: *** [all] Error 1

But, this works with out makefile,using the following command: 但是,这与makefile一起使用,使用以下命令:

 `g++ -o obj Main.cpp file_1.cpp -l armadillo`. 

can any one help me please,if i miss something in my makefile. 如果我错过了makefile中的内容,请任何人帮助我。 thanks.. 谢谢..

Your Makefile is not telling the linker to link it with the Armadillo library. 您的Makefile没有告诉链接器将它与Armadillo库链接。 A way to solve it, although I'm not sure if it's the "good practices" way is to add -l armadillo to the end of the "all:" line. 一种解决它的方法,虽然我不确定它是否是“良好实践”的方法是将-l armadillo添加到“all:”行的末尾。 It probably will be unable to find "EXCUTE_ALL", as I don't see anything creating it and I see it gets erased after cleaning. 它可能无法找到“EXCUTE_ALL”,因为我没有看到任何创建它,我看到它在清理后被删除。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM