gpt4 book ai didi

c++ - 使用 libclang 6.0.1 找不到 : stddef. h

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:04:49 27 4
gpt4 key购买 nike

为了开始使用 libclang,我构建了一个非常简单的程序来尝试加载一个非常简单的源文件。它因找不到“stddef.h”文件而失败。

这是使用 libclang 的程序:

#include <clang-c/Index.h>
int main() {
CXIndex index = clang_createIndex(1,1);
const char *source_path = "foo.cpp";
clang_createTranslationUnitFromSourceFile(index,"foo.cpp",0,0,0,0);
}

(为简洁起见,我省略了与重现问题无关的代码)。

这是我要加载的文件 foo.cpp:

#include <stddef.h>
int main() {}

我使用的是 LLVM 和 Clang 6.0.1,从源代码编译如下:

cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/local -DCMAKE_PREFIX_PATH=$HOME/local -DCMAKE_BUILD_TYPE=Release
make
make install

快速搜索会产生这个有前途的帖子:Clang Error - stddef file not found?不幸的是,这是关于 llvm 3.5,而我使用的是 llvm 6.0.1。另外,我安装 LLVM 和 Clang 的目录 $HOME/local 没有/usr/lib 目录,所以那里提出的解决方案在这里不起作用。

stddef.h header 位于 $HOME/lib/clang/6.0.1/include/stddef.h。将此路径作为 -isystem 选项显式添加到 clang_createTranslationUnitFromSourceFile 调用可解决问题。

此外,clang_createTranslationUnitFromSourceFile 使用的include 搜索路径与clang++ 使用的不一样; clang++ foo.cpp 正常运行。

是否有关于 clang_createTranslationUnitFromSourceFile 和 libclang 中类似函数使用的包含搜索路径的任何文档,以便我可以确定需要添加哪些包含路径?

关于如何使用正确的包含搜索路径调用 clang_createTranslationUnitFromSourceFile 的任何其他建议,相当于 clang++ 使用的路径?

最佳答案

libclang 就像您尝试编译文件一样工作,即:要解析文件,它需要知道在哪里寻找 header ,以及可能的其他信息,例如宏定义、编译标志、等

clang_createTranslationUnitFromSourceFile有两个参数:num_clang_command_line_argsclang_command_line_args。在那里你需要传递实际的标题搜索路径,例如:

const char *cli_args[] = { "-I", "~/local" };
clang_createTranslationUnitFromSourceFile(index, "foo.cpp", 2, cli_args, 0, 0);

关于c++ - 使用 libclang 6.0.1 找不到 : stddef. h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52423089/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com