将 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集成 - 分享此功能

php [将产品与社交共享插件集成]将社交共享插件与WooCommerce集成 - 分享此功能

php [将产品与社交共享插件集成]将社交共享插件与WooCommerce集成 - 分享此功能