我正在尝试使用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拉入哪些文件将非常有帮助。
发布于 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
https://stackoverflow.com/questions/14786189
复制相似问题