【发布时间】:2021-12-28 00:38:59
【问题描述】:
我正在做一个需要使用 libsodium 的项目。我已经成功地将它包含在我的 CMakeLists.txt 文件中,如下所示:
CMakeLists.txt:
cmake_minimum_required(VERSION 3.0.0)
project(skip-list)
set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "/usr/local/include/sodium" "/usr/local/lib/**")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
find_package(Sodium REQUIRED)
add_executable(skip-list main.c)
target_include_directories(skip-list PRIVATE ${Sodium_INCLUDE_DIRS})
target_link_libraries(skip-list PRIVATE ${Sodium_LIBS})
我的目录树结构如下:
-.vscode
-settings.json
-build
-everything cmake autogenerates
-src
-cmake
-all my cmake module files, i.e. FindSodium.cmake
-main.c
-CMakeLists.txt
我的 main.c 非常简单,因为我只是想让库包含工作,但我在下面列出了它:
#include <sodium.h>
#include <stdio.h>
int main() {
printf("here");
if (sodium_init() < 0) {
printf("error");
} else {
printf("%d\n", sodium_init());
}
printf("other side");
return 0;
}
这个输出是:
这里1 另一边
正如人们所期望的那样
什么有效:
-
当我从构建目录运行 cmake ../src 时,构建成功并生成一个 Makefile。*
-
如果我运行
clang -lsodium src/main.c -o main并运行它,我的程序运行良好。 -
如果我 cmd+点击
#include <sodium.h>我成功地被带到我的 /usr/local/include 目录中的 sodium.h 文件并且我正在接收智能感知,所以我相对确定库本身已成功安装我的机器。
什么不起作用:
-
- 当我在构建目录中运行
make时,我得到以下输出:
- 当我在构建目录中运行
[ 50%] Building C object CMakeFiles/skip-list.dir/main.c.o
/Users/anishsinha/Sandbox/skip-list/src/main.c:1:10: fatal error: 'sodium.h' file not found
#include <sodium.h>
^~~~~~~~~~
1 error generated.
make[2]: *** [CMakeFiles/skip-list.dir/main.c.o] Error 1
make[1]: *** [CMakeFiles/skip-list.dir/all] Error 2
make: *** [all] Error 2
基本上我得到的是文件
如果有人能对这个问题有所了解,我将不胜感激。如果您回答或尝试回答此问题,感谢您抽出宝贵时间。
【问题讨论】:
-
不应该是
#include <sodium/sodium.h>? -
sodium.h的完整路径是什么? -
@JohnBollinger /usr/local/include/sodium.h
-
@JohnBollinger 我也试过 /usr/local/include/libsodium/include/sodium.h 也存在
-
@273K 不,/usr/local/include 中不存在