Compilar o código C ++ Com numérico do impulso Encadernação Biblioteca resolver Ax = b Sistema Linear
-
11-09-2019 - |
Pergunta
Eu estou usando numérico Biblioteca Ligações para UBlas impulso para resolver um simples sistema linear:
#include<boost/numeric/ublas/matrix.hpp>
#include<boost/numeric/ublas/io.hpp>
#include<boost/numeric/bindings/traits/ublas_matrix.hpp>
#include<boost/numeric/bindings/lapack/gesv.hpp>
#include <boost/numeric/bindings/traits/ublas_vector2.hpp>
namespace ublas = boost::numeric::ublas;
namespace lapack= boost::numeric::bindings::lapack;
int main()
{
ublas::matrix<float,ublas::column_major> A(3,3);
ublas::vector<float> b(3);
for(unsigned i=0;i < A.size1();i++)
for(unsigned j =0;j < A.size2();j++)
{
std::cout << "enter element "<<i << j << std::endl;
std::cin >> A(i,j);
}
std::cout << A << std::endl;
b(0) = 21; b(1) = 1; b(2) = 17;
lapack::gesv(A,b);
std::cout << b << std::endl;
return 0;
}
Eu tentei compilá-lo com o seguinte comando:
g++ -I/home/foolb/.boost/include/boost-1_38 -I/home/foolb/.boostnumbind/include/boost-numeric-bindings solve_Axb_byhand.cc -o solve_Axb_byhand
mas falhar com o seguinte erro:
/media/disk/tmp/ccbd973l.o: In function `boost::numeric::bindings::lapack::detail::gesv(int, int, float*, int, int*, float*, int, int*)':
solve_Axb_byhand2.cc:(.text._ZN5boost7numeric8bindings6lapack6detail4gesvEiiPfiPiS4_iS5_[boost::numeric::bindings::lapack::detail::gesv(int, int, float*, int, int*, float*, int, int*)]+0x59): undefined reference to `sgesv_'
collect2: ld returned 1 exit status
O que há de errado com a minha abordagem no código?
Solução
sgesv_ é um símbolo da biblioteca LAPACK, você vai ter que apontam para isso. uBLAS apenas se liga a ele, eu acho.
Eu também não sei o nome da biblioteca embora:)
Outras dicas
Desculpe se este é o caminho fora da pista, mas eu não posso vê-lo ligando nas bibliotecas de impulso em seu comando g ++. Eu vejo você, incluindo os caminhos de busca, mas não há nenhuma inclusão explícita das próprias bibliotecas de impulso compilados; algo como -lboost (Eu tenho medo Eu não sei o formato exato que você precisa, e pode muito bem depender de locais).
Ao vincular com a biblioteca de ligação impulso numérico, você pode ligar com o parâmetro
-Lpath/to/lapack -llapack -Lpath/to/blas -lblas -lgfortran
em gcc4
-Lpath/to/lapack -llapack -Lpath/to/blas -lblas -lg2c
em gcc3