gpt4 book ai didi

c++ - llvm JIT addGlobalMapping,不能添加类成员函数,这是一个模板函数

转载 作者:行者123 更新时间:2023-11-30 04:59:05 25 4
gpt4 key购买 nike

我使用 LLVM 进行代码生成,但我遇到了一个问题。

我有一个类如下:

class AAA {
public:
template<typename Type>
void func(Type str) {
std::cout << str << std::endl;
}

void func2() {
std::cout << "hello" << std::endl;
}
};

我有一个 llvm::ExecutionEngine* mJit;

现在我想使用 addGlobalMappingAAA::funcAAA::func2 添加到 llvm 的全局映射中。

// success
mJit->addGlobalMapping(fn_func2, reinterpret_cast<void*>(&AAA::func2));

// failed
// Because the `AAA::func` is an template function
mJit->addGlobalMapping(fn_func, reinterpret_cast<void*>(&AAA::func));

然后我尝试了一种方法如下:

template<class Class, typename K>
using TemplateFunc = void (Class::*) (K);

TemplateFunc<AAA, int> myFunc = &AAA::func;
mJit->addGlobalMapping(fn_func, reinterpret_cast<void*>(myFunc));

但是链接时出现错误:

llvm::Finalize(): error: undefined reference to "void AAA::func(int)". collect2: error: ld returned 1 exit status

那么如何在 llvm JIT 全局映射中添加一个 c++ 模板函数呢?

最佳答案

你得到链接器错误是因为你运行了AAA::func<int>()永远不会实例化。您可以通过显式实例化 int 的函数来解决此问题:

template void AAA::func<>(int);

这会强制编译器实际生成代码。

关于c++ - llvm JIT addGlobalMapping,不能添加类成员函数,这是一个模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51393314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com