2016-07-06 192 views
0

我一直坐在这里一段时间,真的不明白发生了什么事情。 我与cmake和犰狳/ lapack/blas有以下问题:链接armadillo/blas/lapack with cmake(undefined reference to`dgemv_')

我尝试下载与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}") 
+1

你不应该指定连接标志的方式。看看CMake如何工作,特别是'target_link_libraries'。 – usr1234567

+0

我认为你如何设置链接器标志(参见[这里](http://stackoverflow.com/questions/11783932/how-to-add-linker-or-compile-flag-in-cmake-file))。我把这些标志放到'traget_link_library'中,但这也不起作用(同样的错误) – DUWUDA

+0

@ usr1234567现在我也尝试使用'target_compile_options',它也不能用于'target_compile_options(程序PRIVATE -O1 -llpack -lblas) ' – DUWUDA

回答

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 
    )