gpt4 book ai didi

c - 在 C 代码中静态链接 libclang

转载 作者:太空狗 更新时间:2023-10-29 15:42:11 25 4
gpt4 key购买 nike

我正在尝试使用 libclang 中可用的前端为 C 代码编写一个简单的语法检查器。由于部署问题,我需要能够静态链接 libclang 中的所有库,而不是传递包含所有库的 .so 文件。

我正在从源代码构建 clang/llvm,在 llvm/Release+Asserts/lib 中我有一堆 .a 文件,我认为我应该可以使用,但它似乎从来没有工作(链接器喷出出数千个关于缺失符号的错误)。但是,当我使用 libclang.so 编译它时,它也存在于该目录中,如下所示:

clang main.c -o bin/dlc -I../llvm/tools/clang/include -L../llvm/Release+Asserts/lib/ -lclang

一切似乎都运行良好。

要完成这项工作,我至少需要包含哪些 .a 文件?我试过在构建输出目录中包含绝对所有的 .a 文件,并以不同的顺序将它们提供给 clang/gcc,但没有成功。我只需要 libclang 的 Index.h 中提到的函数,但似乎没有关于各种 libclang*.a 文件的用途的任何资源或文档。了解 libclang.so 提取了哪些文件会很有帮助。

最佳答案

只要整个项目包含所有静态库(我在 Release/lib 目录中数了 116 个),以下内容就应该可以工作。

clang main.c -o bin/dlc -I../llvm/tools/clang/include ../llvm/Release/lib/*.a

[编辑:clang main.c -o bin/dlc -I../llvm/tools/clang/include ../llvm/Release/lib/libclang.a ../llvm/Release/lib/*。一个]

请注意,输出二进制文件不是静态的,因此如果您使用此语法,则不需要 gcc 或 ld 的任何 -static 标志。

如果这不起作用,您可能需要按顺序列出库:如果某个库需要另一个库中可用的函数,那么可能需要在命令行中首先列出它。请参阅有关链接顺序的评论: http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Link-Options.html#Link-Options

关于c - 在 C 代码中静态链接 libclang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14786189/

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