首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C代码中静态链接libclang

在C代码中静态链接libclang
EN

Stack Overflow用户
提问于 2013-02-09 16:11:24
回答 1查看 3.3K关注 0票数 4

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

我正在从源代码构建clang/llvm,在llvm/Release+Asserts/lib中,我有一堆.a文件,我认为我应该能够使用它们,但它似乎永远不能工作(链接器显示出成千上万个关于缺少符号的错误)。但是,当我使用该目录中的libclang.so编译它时,如下所示:

代码语言:javascript
复制
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拉入哪些文件将非常有帮助。

EN

回答 1

Stack Overflow用户

发布于 2013-02-14 04:54:06

只要整个项目都有静态库(我在我的Release/lib目录中数到了116个),下面的代码就可以工作了。

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

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14786189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档