【问题标题】: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 标志,编译时仍然是同样的错误

标签: c++ cmake lapack blas armadillo


【解决方案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
    )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多