如何在CLion中添加链接器标志

时间:2019-06-04 16:02:41

标签: c makefile cmake clion libsodium

我正在尝试使用libsodium,我安装了库并尝试进行最简单的测试,当使用Makefile进行项目时,没有问题,但是当使用CLion和Cmake时,我得到“对'sodium_init'的未定义引用”

我正在使用Ubuntu 18.04。 我发现该错误的原因是需要链接以将-lsodium标志添加到链接中(添加该标志可使正常的Makefile正常工作) 当我在网上搜索使用CMake或在CLion中链接到外部库的方法时,我发现许多无效的解决方案,包括:

  • add_link_options(-lsodium)
  • 设置(CMAKE_STATIC_LINKER_FLAGS“ -lsodium”)

这是我正在尝试编译的代码:

#include <stdio.h>
#include <sodium.h>

int main() 
{
    if (sodium_init() < 0)
    {
        printf("sodium init error");
    }
    __uint32_t rand = randombytes_random();
    printf("hello %d, this is a random number \n", &rand);
    return 0;
}

CLion中的完整错误消息如下:

MakeFiles/TestC.dir/main.c.o: In function `main':
/home/--username--/Projects/TestC/main.c:7: undefined reference to `sodium_init'
collect2: error: ld returned 1 exit status
CMakeFiles/TestC.dir/build.make:83: recipe for target 'TestC' failed
make[3]: *** [TestC] Error 1
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/TestC.dir/all' failed
make[2]: *** [CMakeFiles/TestC.dir/all] Error 2
CMakeFiles/Makefile2:84: recipe for target 'CMakeFiles/TestC.dir/rule' failed
make[1]: *** [CMakeFiles/TestC.dir/rule] Error 2
Makefile:118: recipe for target 'TestC' failed
make: *** [TestC] Error 2

编辑: 在查看-https://stackoverflow.com/a/43136754/7276240后,Ive解决了该问题 我在CMakeLists.txt中添加了以下行:  target_link_libraries(TestC libsodium.a) TestC是可执行文件的名称。

1 个答案:

答案 0 :(得分:0)

您可以使用常规的find_package()find_library() CMake命令并将其与target_link_libraries()链接。如果您不想手动指定路径,那么官方存储库中已经有Findsodium.cmakeHere是在Github上发现的CMakeLists.txt的一个随机示例。