【发布时间】:2016-07-06 16:04:51
【问题描述】:
我已经坐了一段时间了,真的不明白发生了什么。 我对 cmake 和 armadillo/lapack/blas 有以下问题:
我尝试用 cmake 下载犰狳,编译它然后链接到我的程序。
但是,虽然我可以下载、编译等。但我无法将其链接到我的程序。
链接到可执行文件时出现以下错误:
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}")
【问题讨论】:
-
您不应该那样指定链接器标志。查看 CMake 的工作原理,尤其是
target_link_libraries。 -
我认为如何设置链接器标志(请参阅here)。我将这些标志放入
traget_link_library,但这也不起作用(同样的错误) -
@usr1234567 现在我也尝试使用
target_compile_options,它也不适用于target_compile_options(program PRIVATE -O1 -llpack -lblas) -
@usr1234567 我的 exe 和共享库都有
-O1 --llpack -blas标志,编译时仍然是同样的错误
标签: c++ cmake lapack blas armadillo