将 armadillo/blas/lapack 与 cmake 链接(未定义对 `dgemv_' 的引用)
Posted
技术标签:
【中文标题】将 armadillo/blas/lapack 与 cmake 链接(未定义对 `dgemv_\' 的引用)【英文标题】:link armadillo/blas/lapack with cmake (undefined reference to `dgemv_')将 armadillo/blas/lapack 与 cmake 链接(未定义对 `dgemv_' 的引用) 【发布时间】: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
标志,编译时仍然是同样的错误
【参考方案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
)
【讨论】:
以上是关于将 armadillo/blas/lapack 与 cmake 链接(未定义对 `dgemv_' 的引用)的主要内容,如果未能解决你的问题,请参考以下文章
php [将产品与社交共享插件集成]将社交共享插件与WooCommerce集成 - Sharedaddy
php [将产品与社交共享插件集成]将社交共享插件与WooCommerce集成 - Sharedaddy
php [将产品与社交共享插件集成]将社交共享插件与WooCommerce集成 - Sharedaddy
php [将产品与社交共享插件集成]将社交共享插件与WooCommerce集成 - 分享此功能