如何在 CLion 中链接库

Posted

技术标签:

【中文标题】如何在 CLion 中链接库【英文标题】:How to link library in CLion 【发布时间】:2018-05-15 22:25:49 【问题描述】:

我正在尝试将 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**)'

我已经在我的 linux mint 上安装了 libntl-dev,将 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】:

如果要使用 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 库。

编辑:修复可执行文件名称拼写错误。

【讨论】:

以上是关于如何在 CLion 中链接库的主要内容,如果未能解决你的问题,请参考以下文章

makefile-动态链接库(*.so)

Clion使用MinGW编译好的boost库

使用静态库链接、编译和运行 c 程序

windows下cmake生成动态链接库dll

Clion(CMake工具)中如何引入第三方库

如何使用自制软件、cMake 和 cLion 将库添加到 C++ 项目