Lapacke - это интерфейс к lapack : lapacke не встроен в lapacke.В результате оба должны быть связаны. Более того, порядок имеет значение: все функции, используемые в библиотеке слева, должны быть определены библиотеками справа.Как следствие, не могли бы вы попытаться связать -llapacke -llapack -lblas -lm
?
Более конкретно, в какой-то момент теста вызывается функция dposv_
, и эта функция реализована в Lapack,не в Лапаке.Действительно, в Lapacke есть интерфейс LAPACKE_dposv()
, вызывающий LAPACKE_dposv_work()
, вызывающий LAPACK_dposv()
, то есть LAPACK_GLOBAL(dposv,DPOSV)
, сводящийся к dposv_
на вашей платформе.
В Cmake, если библиотека lapackв пути поиска в вашей библиотеке, изменение target_link_libraries()
в CMakeLists.txt может сделать локальное решение.
target_link_libraries(culip-tests-la lapacke lapack blas m)
Лучше всего добавить следующие команды в CMakeLists.txt , чтобы убедиться, что Blas и Lapack установлены и найдены:
find_package(BLAS REQUIRED)
find_package(LAPACK REQUIRED)
Последняя строка устанавливает флаги, такие как LAPACK_LIBRARIES
и LAPACK_LINKER_FLAGS
, как определено в FindLAPACK.html и FindLAPACK.cmake .Затем (как в CMake link atlas и llapack ):
target_compile_options(culip-tests-la ${LAPACK_LINKER_FLAGS})
target_link_libraries(culip-tests-la lapacke ${LAPACK_LIBRARIES})
Строка find_package(BLAS REQUIRED)
является излишней, поскольку это почти первое, что сделано в FindLAPACK.cmake .Более того, переменная ${LAPACK_LIBRARIES}
, вероятно, содержит что-то вроде -llapack -lblas -lm
или более.Может быть напечатано:
message( ${LAPACK_LIBRARIES} )