CMakeLists.txt Доступ к библиотеке GSL C - PullRequest
0 голосов
/ 03 декабря 2018

Попытка использовать GSL (Ubuntu 18.04) с CMake.

Установил его в соответствии с их файлом INSTALL:

"sudo sh configure && sudo make && sudo make install"

Структура моей папки:

Folder Structure

Файлы заголовков GSL находятся в /gsl-2.5/gsl/

Мои CMakeLists.txt

cmake_minimum_required(VERSION 3.12)
project(neuronalnetwork C)

set(CMAKE_C_STANDARD 99)

add_executable(neuronalnetwork main.c)


include_directories(gsl-2.5/gsl)
LINK_DIRECTORIES(gsl-2.5)
target_link_libraries(main.c gsl)

Ошибка:

CMake Error at CMakeLists.txt:11 (target_link_libraries):
  Cannot specify link libraries for target "main.c" which is not built by
  this project.

При добавлении target_link_libraries (нейронная сеть gsl) я получаю эту ошибку:

Обновление новой ошибки:

/opt/clion/bin/cmake/linux/bin/cmake --build /home/filip/Projekte/neuronalnetwork/cmake-build-debug --target neuronalnetwork -- -j 4
Scanning dependencies of target neuronalnetwork
[ 50%] Building C object CMakeFiles/neuronalnetwork.dir/main.c.o
[100%] Linking C executable neuronalnetwork
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ctrmv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zswap'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zsymm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_cgeru'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_sgemm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ctrsv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_sgemv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_srotg'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zgemm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_cdotu_sub'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dznrm2'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ddot'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_csymm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_cher2k'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zdotu_sub'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_sdot'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_sdsdot'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_cgerc'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_scnrm2'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ctrmm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_sscal'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_strmm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zcopy'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dsyrk'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_cherk'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zherk'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zher'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ztrmv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_drotmg'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dswap'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_scopy'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_scasum'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zscal'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_drotg'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zdotc_sub'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_cscal'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_caxpy'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zsyr2k'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ssyr2k'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_csyr2k'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ztrsm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ctrsm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ssymm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_cdotc_sub'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zher2k'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_saxpy'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_idamax'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_snrm2'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dsdot'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_cher'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dger'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_cher2'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dzasum'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dsyr2'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ssyrk'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_strmv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dgemv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_cgemm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dasum'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dsymv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_srotm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_sswap'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dtrmv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_isamax'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zhemv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zaxpy'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dcopy'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_sasum'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dsyr'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_strsm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_drot'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ztrsv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_izamax'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ssymv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_chemm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zgeru'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dtrsv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_sger'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_srot'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dsymm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ztrmm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zdscal'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zher2'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ssyr'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dtrmm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zgerc'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_csscal'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dsyr2k'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_chemv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dnrm2'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_drotm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_icamax'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zgemv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zhemm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_cgemv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ssyr2'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_strsv'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dscal'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dgemm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_srotmg'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_dtrsm'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_ccopy'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_zsyrk'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_cswap'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_daxpy'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libgsl.so: undefined reference to `cblas_csyrk'
collect2: error: ld returned 1 exit status

Предложения по другим вопросам не сработали

1 Ответ

0 голосов
/ 03 декабря 2018

Ваше новое сообщение об ошибке сообщает, что библиотека blas не найдена;см. gsl пример для флагов компоновщика, которые нужно добавить.

Для получения более подробной информации о том, как работать с GSL через CMake, посмотрите FindGSL.cmakeфайл собственного проекта.

В более общем случае обычно используют GSL в качестве внешней зависимости. Вы уверены, что хотите включить его в свой код?

EDIT Исходя из комментариев, вы должны использовать GSL как внешнюю зависимость, просто установите его в своей системе, используя менеджер пакетов linux (найдите gsl и убедитесь, что вы получили файлы заголовков)

Затем скопируйте FindGSL.cmakeфайл eigen, скопируйте его куда-нибудь, затем, как они это делают, запустите в вашем CMakeLists.txt

find_package(GSL)
include_directories(${GSL_INCLUDE_DIR})

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

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/where/you/put/the/file/)

РЕДАКТИРОВАТЬ 2:

Чтобы сделать это более явным, вот полный код, который вам нужен:

cmake_minimum_required(VERSION 3.12)
project(neuronalnetwork C)

set(CMAKE_C_STANDARD 99)

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
find_package(GSL)

add_executable(neuronalnetwork main.c)
target_include_directories(neuronalnetwork PRIVATE ${PROJECT_SOURCE_DIR} ${GSL_INCLUDE_DIR})
target_link_libraries(neuronalnetwork ${GSL_LIBRARIES})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...