我有一个在另一个cpp文件中定义的函数,我想在LLVM IR中使用它。你能告诉我如何使用它们并链接它们。
我做了以下
FunctionType *joinTy = FunctionType::get(voidTy, false);
Function *join = Function::Create(joinTy, Function::ExternalLinkage,"join", &M);
join->setCallingConv(CallingConv::C);
并将其称为:
Function *join = (&M)->getFunction("join");
CallInst * calljoin = CallInst::Create(join,"",branchInst);
我在外部文件threads.cpp中有join函数,比如
void join() {
printf("join\n");
int i;
for (i = 0; i < NUM_THREADS; i++) {
if (threads[i]) {
pthread_join(threads[i], NULL);
}
}
}
我有一个.bc
(LLVM IR)文件,我使用llc
编译为.s。我编译threads.cpp
使用threads.o
到g++ -c threads.cpp
。现在我试图将它们链接为
g++ -o exe test.bc threads.o -pthreads
我收到错误:
加入
的未定义参考
即使我清楚地链接了所需的文件。有什么帮助吗?
答案 0 :(得分:2)
首先,g ++不了解LLVM的bitcode(.bc文件)。所有这些都是LLVM IR的二进制表示,因此您无法将IR与目标文件链接。
如果要与LLVM建立链接,可以使用llvm-link。这将要求您还将pthreads编译为LLVM(clang也支持-pthread选项)。
这应该会让你完全接受: