【发布时间】:2013-01-25 00:32:52
【问题描述】:
我正在尝试使用 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 引入了哪些文件会非常有帮助。
【问题讨论】:
-
如果将
-static添加到链接器标志会怎样? -
我已经尝试过 gcc
-static -lstatic1 -lstatic2 -Wl,-ldynamic1 -ldyanamic2 如link 所见,不静态链接所有libc(我可以动态链接那么多) .但是,它似乎根本没有帮助,因为我仍然需要知道哪些 .a 文件是必要的。 -
哦,我明白了。链接器抱怨哪些符号?
-
它抱怨几乎所有可以想象的符号 - 来自编译器各个阶段的许多 C++ 方法。打印所有错误大约需要 30 秒,所以我怀疑如果我在这里复制它会有任何价值......