Я компиляции простую тестовую программу, которая делает использование lapack
, однако у меня есть 3 версии LaPack библиотеки, установленной (один из Apple, в /usr/lib
, один из MacPorts в /opt/local/lib
и один я установил себя в /usr/local/lib
).Связывание с конкретной библиотеки
У меня есть следующий CMakeLists.txt файл:
cmake_minimum_required(VERSION 3.0)
project(delme)
include_directories(../../include /usr/local/include/boost-numeric-bindings)
find_library(lapack_LIBRARY NAMES lapack liblapack HINTS /usr/local/lib)
find_library(atlas_LIBRARY NAMES atlas libatlas HINTS /usr/local/lib)
find_library(cblas_LIBRARY NAMES cblas libcblas HINTS /usr/local/lib)
add_executable(delme test.cpp main.cpp)
target_link_libraries(delme lapack atlas cblas)
install(TARGETS delme RUNTIME DESTINATION bin)
После вызова cmake . && make VERBOSE=1
, я получаю выход заканчивается:
Linking CXX executable delme
/opt/local/bin/cmake -E cmake_link_script CMakeFiles/delme.dir/link.txt --verbose=1
/usr/bin/c++ -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/delme.dir/test.cpp.o CMakeFiles/delme.dir/main.cpp.o -o delme -llapack -latlas -lcblas
Undefined symbols for architecture x86_64:
"_clapack_dgetrf", referenced from:
boost::numeric::bindings::atlas::detail::getrf(CBLAS_ORDER, int, int, double*, int, int*) in main.cpp.o
"_clapack_dgetri", referenced from:
boost::numeric::bindings::atlas::detail::getri(CBLAS_ORDER, int, double*, int, int const*) in main.cpp.o
"_clapack_dpotrf", referenced from:
boost::numeric::bindings::atlas::detail::potrf(CBLAS_ORDER, CBLAS_UPLO, int, double*, int) in main.cpp.o
ld: symbol(s) not found for architecture x86_64
Эти символы в /usr/local/lib
и MacPorts версий, но не от Apple версия, которая, кажется, та, с которой она связана. Если я вручную добавлю -L/usr/local/lib
в файл сгенерированный CMake CMakeFiles/delme.dir/link.txt
, тогда он компилируется отлично.
Мой вопрос: как я могу указать cmake включить -L/usr/local/lib
в его ссылку (или другую альтернативу), чтобы она использовала версию в /usr/local/lib
?
Из трех путей библиотеки, любые из них в переменной окружения PATH? И в каком порядке они? – jmstoker
Нет, ни один из путей библиотеки не находится в переменной среды $ PATH. –