对于一个项目,我需要使用armadillo给出的稀疏求解器,它似乎是SuperLU的包装器,我目前遇到了一个问题。
您可能还会注意到我无法访问计算机上的根目录
这是一个最小的例子:
#include <iostream>
#define ARMA_USE_SUPERLU 1
#include <armadillo>
using namespace arma;
int main()
{
sp_mat A = sprandu<sp_mat>(1000, 1000, 0.1);
vec b = randu<vec>(1000);
vec x;
spsolve(x, A, b, "superlu"); // use SuperLU solver
return 0;
}
我的CMakeLists.txt是
cmake_minimum_required (VERSION 3.2)
project (test_super_LU)
set(base_flags "-g -O3 -std=c++11")
set(CMAKE_CXX_FLAGS ${base_flags})
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
set(ARMADILLO_LIBRARIES "/home/cpivot/SoftWare/usr/lib64/libarmadillo.so")
set(SUPERLU_LIBRARIES "/home/cpivot/SoftWare/usr/lib64/libsuperlu.a")
include_directories(/home/cpivot/SoftWare/usr/include)
add_executable(test_superLU test_superLU.cpp)
target_link_libraries(test_superLU -g
-fPIC
${ARMADILLO_LIBRARIES}
${SUPERLU_LIBRARIES}
)
汇编给了我
[100%] Building CXX object CMakeFiles/test_superLU.dir/test_superLU.cpp.o
Linking CXX executable ../bin/test_superLU
CMakeFiles/test_superLU.dir/test_superLU.cpp.o: dans la fonction « arma::sp_auxlib::destroy_supermatrix(arma::superlu::SuperMatrix&) »:
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:166: référence indéfinie vers « wrapper_superlu_free »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:139: référence indéfinie vers « wrapper_Destroy_CompCol_Matrix »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:130: référence indéfinie vers « wrapper_Destroy_SuperNode_Matrix »
CMakeFiles/test_superLU.dir/test_superLU.cpp.o: dans la fonction « bool arma::sp_auxlib::spsolve_simple<arma::SpMat<double>, arma::Mat<double> >(arma::Mat<arma::SpMat<double>::elem_type>&, arma::SpBase<arma::SpMat<double>::elem_type, arma::SpMat<double> > const&, arma::Base<arma::SpMat<double>::elem_type, arma::Mat<double> > const&, arma::superlu_opts const&) »:
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:121: référence indéfinie vers « wrapper_set_default_options »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:157: référence indéfinie vers « wrapper_superlu_malloc »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:157: référence indéfinie vers « wrapper_superlu_malloc »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:157: référence indéfinie vers « wrapper_superlu_malloc »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:157: référence indéfinie vers « wrapper_superlu_malloc »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:157: référence indéfinie vers « wrapper_superlu_malloc »
CMakeFiles/test_superLU.dir/test_superLU.cpp.o:/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:157: encore plus de références indéfinies suivent vers « wrapper_superlu_malloc »
CMakeFiles/test_superLU.dir/test_superLU.cpp.o: dans la fonction « bool arma::sp_auxlib::spsolve_simple<arma::SpMat<double>, arma::Mat<double> >(arma::Mat<arma::SpMat<double>::elem_type>&, arma::SpBase<arma::SpMat<double>::elem_type, arma::SpMat<double> > const&, arma::Base<arma::SpMat<double>::elem_type, arma::Mat<double> > const&, arma::superlu_opts const&) »:
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:104: référence indéfinie vers « wrapper_StatInit »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:38: référence indéfinie vers « wrapper_dgssv »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:112: référence indéfinie vers « wrapper_StatFree »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:166: référence indéfinie vers « wrapper_superlu_free »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:166: référence indéfinie vers « wrapper_superlu_free »
CMakeFiles/test_superLU.dir/test_superLU.cpp.o: dans la fonction « bool arma::sp_auxlib::spsolve_refine<arma::SpMat<double>, arma::Mat<double> >(arma::Mat<arma::SpMat<double>::elem_type>&, arma::SpMat<double>::pod_type&, arma::SpBase<arma::SpMat<double>::elem_type, arma::SpMat<double> > const&, arma::Base<arma::SpMat<double>::elem_type, arma::Mat<double> > const&, arma::superlu_opts const&) »:
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:121: référence indéfinie vers « wrapper_set_default_options »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:157: référence indéfinie vers « wrapper_superlu_malloc »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:157: référence indéfinie vers « wrapper_superlu_malloc »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:157: référence indéfinie vers « wrapper_superlu_malloc »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:157: référence indéfinie vers « wrapper_superlu_malloc »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:157: référence indéfinie vers « wrapper_superlu_malloc »
CMakeFiles/test_superLU.dir/test_superLU.cpp.o:/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:157: encore plus de références indéfinies suivent vers « wrapper_superlu_malloc »
CMakeFiles/test_superLU.dir/test_superLU.cpp.o: dans la fonction « bool arma::sp_auxlib::spsolve_refine<arma::SpMat<double>, arma::Mat<double> >(arma::Mat<arma::SpMat<double>::elem_type>&, arma::SpMat<double>::pod_type&, arma::SpBase<arma::SpMat<double>::elem_type, arma::SpMat<double> > const&, arma::Base<arma::SpMat<double>::elem_type, arma::Mat<double> > const&, arma::superlu_opts const&) »:
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:104: référence indéfinie vers « wrapper_StatInit »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:82: référence indéfinie vers « wrapper_dgssvx »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:112: référence indéfinie vers « wrapper_StatFree »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:166: référence indéfinie vers « wrapper_superlu_free »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:166: référence indéfinie vers « wrapper_superlu_free »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:166: référence indéfinie vers « wrapper_superlu_free »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:166: référence indéfinie vers « wrapper_superlu_free »
/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:166: référence indéfinie vers « wrapper_superlu_free »
CMakeFiles/test_superLU.dir/test_superLU.cpp.o:/home/cpivot/SoftWare/usr/include/armadillo_bits/wrapper_superlu.hpp:166: encore plus de références indéfinies suivent vers « wrapper_superlu_free »
collect2: erreur: ld a retourné 1 code d'état d'exécution
make[2]: *** [../bin/test_superLU] Erreur 1
make[1]: *** [CMakeFiles/test_superLU.dir/all] Erreur 2
make: *** [all] Erreur 2
我怎样才能使它有效?
感谢
答案 0 :(得分:1)
我不熟悉armadilo,但你可能需要在#include之前#define