摘要: llvm-ld
已从LLVM 3.2 版本中删除。我试图弄清楚如何在我的构建系统中使用 clang。
请注意,我在编写它时找到了我自己问题的答案,但我仍在发布它以防它对其他人有用。也欢迎其他答案。
详情:
我有一个构建过程,它首先使用clang++ -emit-llvm
. 然后我获取位码文件并将它们与llvm-link
. 然后我应用了一些标准的优化通道opt
。然后我应用另一个自定义编译器通过opt
. 然后我第三次再次应用标准优化通道opt
。最后,我从上次运行的输出中获取opt
并使用llvm-link
与适当的库链接以生成我的可执行文件。当我尝试在此过程中替换为时llvm-link
,clang++
我收到错误消息:file not recognized: File format not recognized
为了使这个问题更具体,我创建了一个简化的示例来说明我正在尝试做的事情。首先有两个文件我要编译并链接在一起
测试1.cpp:
#include <stdio.h>
int getNum();
int main()
{
int value = getNum();
printf("value is %d\n", value);
return 0;
}
测试2.cpp
int getNum()
{
return 5;
}
我执行了以下命令序列:
clang++ -emit-llvm -c test1.cpp test2.cpp
llvm-link -o test.bc1 test1.o test2.o
opt test.bc1 -o test.bc2 -std-compile-opts
(请注意,我目前正在运行 llvm 3.1,但我正在尝试找出适用于 llvm 3.2 的步骤。我假设我应该能够使用 clang 而不是 llvm-ld 使 LLVM 3.1 版本正常工作)
然后,如果我运行:
llvm-ld test.bc2 -o a.out -native
一切都很好,a.out
打印出来 5。
但是,如果我运行:
clang++ test.bc2 -o a.out
然后我收到错误消息:
test.bc2: file not recognized: File format not recognized clang-3:
error: linker command failed with exit code 1 (use -v to see invocation)
显然我知道我可以通过直接在 .cpp 文件上运行 clang 来生成一个可执行文件。但我想知道与之集成的最佳方式clang
是什么opt
。