作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 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
;
现在我想使用 addGlobalMapping
将 AAA::func
和 AAA::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/
我使用 LLVM 进行代码生成,但我遇到了一个问题。 我有一个类如下: class AAA { public: template void func(Type str) {
我是一名优秀的程序员,十分优秀!