【问题标题】:How to add linker flags in CLion [duplicate]如何在 CLion 中添加链接器标志 [重复]
【发布时间】:2019-06-04 16:02:41
【问题描述】:

我尝试使用 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 我在 CMakeLists.txt 中添加了以下行: target_link_libraries(TestC libsodium.a) TestC 是可执行文件的名称。

【问题讨论】:

  • 我看到这被标记为重复,但我很高兴它存在。我在同一个库中遇到了完全相同的问题。由于我是 C 新手,我认为链接的副本不会引起我的注意。正是这篇文章导致我解决了我的问题,而不是据称这是重复的帖子。我希望 OP 在答案部分回答他或她自己的问题,而不是编辑问题,以便其他人可以更轻松地找到此解决方案。

标签: c makefile cmake clion libsodium


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2014-08-23
    • 2020-03-12
    • 1970-01-01
    相关资源
    最近更新 更多