我一直坐在这上一段时间,真的不明白发生了什么。 我对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}")
答案 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
)