Pergunta

Quando tento compilar example1.cpp que vem com o Armadillo 2.4.2, continuo recebendo o seguinte erro de vinculação:

/tmp/ccbnLbA0.o: In function `double arma::blas::dot<double>(unsigned int, double const*, double const*)':
main.cpp:(.text._ZN4arma4blas3dotIdEET_jPKS2_S4_[double arma::blas::dot<double>(unsigned int, double const*, double const*)]+0x3b): undefined reference to `wrapper_ddot_'
/tmp/ccbnLbA0.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*)':
main.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*)]+0x68): undefined reference to `wrapper_dgemv_'
/tmp/ccbnLbA0.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*)':
main.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*)]+0x7a): undefined reference to `wrapper_dgemm_'
collect2: ld returned 1 exit status

Alguém pode ajudar?Eu instalei manualmente

  • última versão do BLAS
  • lappack-3.4.0
  • impulso-1.48.0
  • última versão do ATLAS

Estou usando o Ubuntu 11.04 no modelo MacBook Pro 7.1

Foi útil?

Solução

Muito obrigado a osgx!Depois de ler seu comentário, dei uma segunda olhada no arquivo README!Acontece que estava faltando '-O1 -larmadillo' no comando!

Aqui está o comando que usei para fazê-lo funcionar:

g++ example1.cpp -o example1 -O1 -larmadillo

Erro estúpido, eu sei....Isso apenas serve para lembrá-lo de como é importante ler o README.

O README também menciona:

Se você receber erros de vinculação, ou se o Armadillo foi instalado manualmente e você especificou que o lapack e o blas estão disponíveis, precisará se vincular explicitamente com o LaPack e o BLAS (ou seus equivalentes), por exemplo:

g++ example1.cpp -o example1 -O1 -llapack -lblas

Não precisei incluir '-llapack -lblas', mas talvez isso ajude qualquer pessoa que esteja tendo problemas semelhantes.

Outras dicas

Há uma estranheza que acabei de descobrir comparando compilações de código anteriormente funcionais com o próprio problema deste tópico, enfatizando o envolvimento do gnu cc (não sou especialista nisso):No sucesso da compilação da minha máquina, depende da ordem dos parâmetros para o GCC/G++, onde g++ infile -o outfile -libarmadillo ...funcionou, mas g++ -libarmadillo infile -o outfile ...não ocorreu com (quase) o mesmo erro mencionado acima.(espero que ajude).

A partir de 5.0.0 (também pode se aplicar a versões anteriores)

Você realmente precisa -larmadillo, sobre Fedora 21 -llapack e -lopenblas não são mais explicitamente necessários.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top