2016-07-06 195 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 
    )