Armadillo + BLAS + LAPACK: Linking error?

14,735

Solution 1

Thank you so much to osgx! After reading his comment, I took a second look at the README file! It turns out I was missing '-O1 -larmadillo' in the command!

Here's the command I used to get it working:

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

Stupid mistake, I know.... It just goes to remind you how important it is to read the README.

The README also mentions:

If you get linking errors, or if Armadillo was installed manually and you specified that LAPACK and BLAS are available, you will need to explicitly link with LAPACK and BLAS (or their equivalents), for example:

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

I didn't have to include '-llapack -lblas' but maybe this will help anyone else who's having similar problems.

Solution 2

There's an oddity I just discovered by comparing previously working compilations of code with the very problem of this thread, stressing the involvement of the gnu cc (I'm no expert in this): on my machine compilation success depends on the order of parameters to the gcc/g++ where g++ infile -o outfile -libarmadillo ... worked, but g++ -libarmadillo infile -o outfile ... didnt with (almost) the same error as mentioned above. (hope that helps).

Share:
14,735
Marc
Author by

Marc

Updated on June 14, 2022

Comments

  • Marc
    Marc almost 2 years

    When I try to compile example1.cpp that comes with Armadillo 2.4.2, I keep getting the following linking error:

    /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
    

    Can someone help? I manually installed

    • latest version of BLAS
    • lapack-3.4.0
    • boost-1.48.0
    • latest version of ATLAS

    I'm using Ubuntu 11.04 on the MacBook Pro 7,1 model

  • Matt
    Matt over 10 years
    This was exactly what I was looking for! Have to link LAPACK and BLAS only. I am also guilty for not reading the README so don't feel bad. I was cross-compiling and getting undefined references to my LAPACK and BLAS: 'cgemv_', 'sdot_', ...etc...