将犰狳/布拉斯/拉帕克与 cmake 链接(未定义对"dgemv_"的引用)

link armadillo/blas/lapack with cmake (undefined reference to `dgemv_')

本文关键字:未定义 dgemv 引用 链接 布拉斯 帕克 cmake      更新时间:2023-10-16

我已经坐了一段时间了,真的不明白发生了什么。我对cmake和犰狳/拉帕克/布拉斯有以下问题:

我尝试用cmake下载犰狳,编译它,然后将其链接到我的程序。

但是,虽然我可以下载,编译它等。我在将其链接到我的程序时遇到麻烦。

链接到可执行文件时出现以下错误: undefined reference to `dgemv_' 所以我知道这是一个lapack/blas的事情,但我无法弄清楚出了什么问题。

我的CMakeList.txt中的相关部分如下。如果有人能帮助我,我会很高兴。出于沮丧,我差点吃掉我的键盘。

ExternalProject_Add(ArmadilloDownload
    PREFIX ${LIBRARY_OUTPUT_PATH}/armadillo-7.100.3
    DOWNLOAD_COMMAND wget http://sourceforge.net/projects/arma/files/armadillo-7.100.3.tar.xz
    CONFIGURE_COMMAND tar -xf ../armadillo-7.100.3.tar.xz -C ../ArmadilloDownload  --strip-components=1
    BUILD_IN_SOURCE 1
    BUILD_COMMAND cmake .
    INSTALL_COMMAND make
    UPDATE_COMMAND ""
    )
set(Armadillo_DIR ${LIBRARY_OUTPUT_PATH}/armadillo-7.100.3/src/ArmadilloDownload)
set(ARMADILLO_LIBRARY ${Armadillo_DIR}/libarmadillo.so)
set(ARMADILLO_INCLUDE_DIR ${Armadillo_DIR}/include/)
include_directories(${ARMADILLO_INCLUDE_DIR})
set(GCC_ARMADILLO_LINK_FLAG "-O1 -llapack -lblas")
SET(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} ${GCC_ARMADILLO_LINK_FLAG}")
SET(CMAKE_SHARED_LINKER_FLAGS  "${CMAKE_SHARED_LINKER_FLAGS} ${GCC_ARMADILLO_LINK_FLAG}")

我应该使用 target_link_library 来设置库标志,而不是SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_ARMADILLO_LINK_FLAG}")

所以使用作品

target_link_libraries(exe
    customlib1
    customlib2
    -O2 blas lapack
    )