2016-07-06 3 views
0

Я уже некоторое время сижу на этом и действительно не понимаю, что происходит. У меня проблема с cmake и armadillo/lapack/blas:link armadillo/blas/lapack with cmake (неопределенная ссылка на `dgemv_ ')

Я пытаюсь загрузить armadillo с cmake, скомпилировать его, а затем связать его с моей программой.

Однако, хотя я могу скачать, скомпилировать его и т. Д. У меня проблемы, связанные с моей программой.

я получаю следующую ошибку при связывании исполняемым: undefined reference to `dgemv_' Так что я знаю, что это LAPACK/Блас вещь, но я не могу понять, что это неправильно.

Ниже перечислены соответствующие детали в моем 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 
    ) 
Смежные вопросы