首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用clang代替ld?

如何用clang代替ld?
EN

Stack Overflow用户
提问于 2013-01-30 02:52:20
回答 2查看 8K关注 0票数 10

摘要: llvm-ld已从LLVM 3.2 release中删除。我试图弄清楚如何在我的构建系统中使用clang。

请注意,我在写自己的问题时找到了答案,但我仍在张贴,以防对其他人有用。另外的答案也是受欢迎的。

详细信息

我有一个构建过程,它首先使用clang++ -emit-llvm生成比特代码。然后,我获取比特码文件,并将它们与llvm-link链接在一起。然后在opt中应用一些标准的优化传递。然后,我使用opt应用另一个自定义编译器传递。然后我第三次应用标准优化,再次使用opt。最后,我从opt的最后一次运行中获取输出,并使用llvm-link与适当的库链接以生成我的可执行文件。在此过程中,当我试图用llvm-link替换clang++时,我得到了错误消息:file not recognized: File format not recognized

为了使这个问题更加具体,我创建了一个简单的例子来说明我想要做的事情。首先,我想编译和链接两个文件。

test1.cpp:

代码语言:javascript
复制
#include <stdio.h>

int getNum();

int main()
{
  int value = getNum();
  printf("value is %d\n", value);
  return 0;
}

test2.cpp

代码语言:javascript
复制
int getNum()
{
  return 5;
}

我执行了以下命令序列:

代码语言:javascript
复制
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

(请注意,我目前正在运行llvm3.1,但我正在试图找出用于llvm3.2的步骤。我假设我应该能够使LLVM 3.1版本正确地使用clang而不是llvm)。

如果我跑了:

代码语言:javascript
复制
llvm-ld test.bc2 -o a.out -native

一切都很好,a.out打印出5。

但是,如果我跑:

代码语言:javascript
复制
clang++ test.bc2 -o a.out

然后我得到错误消息:

代码语言:javascript
复制
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来生成一个可执行文件。但是,我想知道将clangopt集成的最佳方法是什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-30 02:52:20

可以使用以下步骤编译问题中描述的测试用例:

代码语言:javascript
复制
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从bitcode转换为机器代码,然后clang可以像往常一样处理这些代码。

票数 4
EN

Stack Overflow用户

发布于 2013-05-14 05:30:05

总的来说,我发现

代码语言:javascript
复制
llvm-ld x.bc y.bc

可以用

代码语言:javascript
复制
llc x.bc
llc y.bc
clang x.s y.s
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14595906

复制
相关文章

相似问题

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