链接犰狳/ blas / lapack与cmake(未定义引用`dgemv _')

时间:2016-07-06 16:04:52

标签: c++ cmake lapack blas armadillo

我一直坐在这上一段时间,真的不明白发生了什么。 我对cmake和armadillo / lapack / blas有以下问题:

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

然而,虽然我可以下载,编译等等。但我将它与我的程序联系起来很麻烦。

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

我的CMakeLists.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}")

1 个答案:

答案 0 :(得分:1)

我应该使用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
    )