如何铿锵代替LLVM-LD?(How to replace llvm-ld with clang?)

2019-08-08 19:56发布

摘要: llvm-ld已经从删除LLVM 3.2发布 。 我试图找出如何在我的构建系统使用铛在它的位置。

请注意,我想出答案我自己的问题而写,但我仍然张贴在情况下,它是别人有用。 备选答案也欢迎。

联系方式

我有一个构建过程,其首先生成位码使用clang++ -emit-llvm 。 然后,我走位码文件,并将它们与链接在一起llvm-link 。 然后我采用了一些标准优化过程与opt 。 然后,我申请另一个自定义编译过程与opt 。 然后,我申请的标准优化过程再次使用opt第三次。 最后,我从最后运行的输出opt和使用llvm-link与相应的库链接到生成可执行我。 当我试图取代llvm-linkclang++在这个过程中,我得到的错误信息: file not recognized: File format not recognized

为了使这个问题更具体的我创造了什么,我试图做一个简单的例子。 首先有两个文件,我想编译和链接在一起

test1.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工作步骤。我认为我应该能够使LLVM 3.1版本工作中使用铛,而不是LLVM-LD正确)

然后,如果我运行:

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文件运行铛生成一个可执行文件。 但我想知道什么是最好的方式来整合clangopt是。

Answer 1:

在问题描述的试验情况下,可以使用以下步骤来编译:

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

llc -filetype=obj test.bc2 -o test.o
clang++ test.o

这就产生一个工作a.out文件。

似乎llc是需要从位码转换成然后可以通过被处理机器代码clang ,因为它通常会。



Answer 2:

一般来说,我发现,

llvm-ld x.bc y.bc

可以替换

llc x.bc
llc y.bc
clang x.s y.s


文章来源: How to replace llvm-ld with clang?
标签: llvm clang ld