Как связать библиотеку в CLion - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь использовать библиотеку NTL для класса ZZ и хотел бы использовать выделенные функции.К сожалению, во время компиляции я получаю много ошибок:

[100%] Linking CXX executable hpc5
CMakeFiles/hpc5.dir/main.cpp.o: In function `findX(NTL::ZZ, NTL::ZZ, NTL::ZZ)':
/home/rooter/CLionProjects/hpc5/main.cpp:44: undefined reference to `find_xi(NTL::ZZ, NTL::ZZ)'
/home/rooter/CLionProjects/hpc5/main.cpp:57: undefined reference to `chinese_remainder(NTL::ZZ*, NTL::ZZ*, NTL::ZZ)'
/home/rooter/CLionProjects/hpc5/main.cpp:58: undefined reference to `NTL::operator<<(std::ostream&, NTL::ZZ const&)'
CMakeFiles/hpc5.dir/main.cpp.o: In function `NTL::ZZ::ZZ(NTL::ZZ const&)':
/usr/include/NTL/ZZ.h:58: undefined reference to `_ntl_gcopy(void*, void**)'
CMakeFiles/hpc5.dir/main.cpp.o: In function `NTL::ZZ::operator=(NTL::ZZ const&)':
/usr/include/NTL/ZZ.h:73: undefined reference to `_ntl_gcopy(void*, void**)'
CMakeFiles/hpc5.dir/main.cpp.o: In function `NTL::ZZ::operator=(long)':
/usr/include/NTL/ZZ.h:75: undefined reference to `_ntl_gintoz(long, void**)'

Я установил libntl-dev на мой Linux-монетный двор, добавил set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -lntl" ) к своему CMakeLists.txt и установил параметр CMake -lntl, и этоне имеет никакого эффектаКак я могу связать эту библиотеку?

Мой CMakeLists.txt содержит:

cmake_minimum_required(VERSION 3.10)
project(hpc5)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -lntl" )

add_executable(hpc5 main.cpp)

1 Ответ

0 голосов
/ 16 мая 2018

Если вы хотите связать библиотеку времени выполнения с помощью CMake, вам нужно использовать команду target_link_libraries . Например, вы можете изменить свой файл CMakeLists.txt следующим образом:

cmake_minimum_required(VERSION 3.10)
project(hpc5)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" )

add_executable(hpc5 main.cpp)
target_link_libraries(hpc5 ntl)

Предполагается, что CMake может найти библиотеку NTL в вашей системе.

РЕДАКТИРОВАТЬ: Исправить опечатку имени исполняемого файла.

...