NimBuzz
NimBuzz

Reputation: 51

Dlib C++ library with Qt on macOS Sierra

I am using dlib c++ library with Qt on macOS Sierra. I can compile all examples from terminal and some examples with Qt. However, compiling some examples such as optimization with Qt throws below linker error:

Undefined symbols for architecture x86_64:
"_cblas_daxpy", referenced from:
  dlib::blas_bindings::cblas_axpy(int, double, double const*, int, double*, int) in main.o
"_cblas_ddot", referenced from:
  dlib::blas_bindings::cblas_dot(int, double const*, int, double const*, int) in main.o
"_cblas_dgemv", referenced from:
  dlib::blas_bindings::cblas_gemv(dlib::blas_bindings::CBLAS_ORDER, dlib::blas_bindings::CBLAS_TRANSPOSE, int, int, double, double const*, int, double const*, int, double, double*, int) in main.o
"_cblas_dger", referenced from:
  dlib::blas_bindings::cblas_ger(dlib::blas_bindings::CBLAS_ORDER, int, int, double, double const*, int, double const*, int, double*, int) in main.o
"_cblas_dscal", referenced from:
  dlib::blas_bindings::cblas_scal(int, double, double*) in main.o
"_cblas_dtrsm", referenced from:
  dlib::blas_bindings::cblas_trsm(dlib::blas_bindings::CBLAS_ORDER, dlib::blas_bindings::CBLAS_SIDE, dlib::blas_bindings::CBLAS_UPLO, dlib::blas_bindings::CBLAS_TRANSPOSE, dlib::blas_bindings::CBLAS_DIAG, int, int, double, double const*, int, double*, int) in main.o
"_dgetrf_", referenced from:
  dlib::lapack::binding::getrf(int, int, double*, int, int*) in main.o
"_dpotrf_", referenced from:
  dlib::lapack::binding::potrf(char, int, double*, int) in main.o
"_dsyevr_", referenced from:
  dlib::lapack::binding::syevr(char, char, char, int, double*, int, double, double, int, int, double, int*, double*, double*, int, int*, double*, int, int*, int) in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I have also included in .pro file: LIBS += -L/usr/local/lib\ -ldlib\

After installing LAPACK, BLAS, and CBLAS and including -lblas and -llapack in the .pro I got this error in addition to the error above:

warning: object file (/usr/local/lib/liblapack.a(iladlr.o)) was built for newer OSX version (10.12) than being linked (10.8)
Undefined symbols for architecture x86_64:
"__gfortran_concat_string", referenced from:
  _dormtr_ in liblapack.a(dormtr.o)
  _dormql_ in liblapack.a(dormql.o)
  _dormqr_ in liblapack.a(dormqr.o)
"__gfortran_st_write", referenced from:
  _xerbla_ in libblas.a(xerbla.o)
"__gfortran_st_write_done", referenced from:
  _xerbla_ in libblas.a(xerbla.o)
"__gfortran_stop_string", referenced from:
  _xerbla_ in libblas.a(xerbla.o)
"__gfortran_string_len_trim", referenced from:
  _xerbla_ in libblas.a(xerbla.o)
"__gfortran_transfer_character_write", referenced from:
  _xerbla_ in libblas.a(xerbla.o)
"__gfortran_transfer_integer_write", referenced from:
  _xerbla_ in libblas.a(xerbla.o)

Upvotes: 2

Views: 772

Answers (1)

NimBuzz
NimBuzz

Reputation: 51

It seems the new macOS already has LAPACK. You only need to include -lcblas and -lclapack in the .pro file. You may find them in /usr/lib or /usr/local/lib.

if in /usr/lib:

LIBS += -L/usr/lib\
-lcblas\
-lclapack\
-L/usr/local/lib\
-ldlib\

if in /usr/local/lib

LIBS += -L/usr/local/lib\
-lcblas\
-lclapack\
-ldlib\

Upvotes: 2

Related Questions