我有一个在另一个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
。我使用g++ -c threads.cpp
将threads.cpp
编译为threads.o
。现在我正在尝试将它们链接起来,如下:
g++ -o exe test.bc threads.o -pthreads
我出现了一个错误:
undefined reference to join
尽管我明确链接了所需的文件。有什么帮助吗?