私は最近、MinGW で LLVM の実験を始めました。Kaleidoscopeのチュートリアルを読みましたが、外部関数に問題があります。
次のような外部関数を宣言しています。
const Type* doubleType = Type::getPrimitiveType(ctx, Type::DoubleTyID);
std::vector<const Type*> doubleParams;
doubleParams.push_back(doubleType);
FunctionType* doubleDouble = FunctionType::get(doubleType, doubleParams, false);
Function* SinFunction = Function::Create(doubleDouble, Function::ExternalLinkage, "sin", mod);
mod は Module* で、ctx は LLVMContext& です。
この場合、すべてが正常に機能します。ただし、関数を宣言すると:
extern "C"
double my_cubic_transform(double x) {
return x*x*x;
}
そして、SinFunction 宣言を "sin" の使用から "my_cubic_transform" の使用に (他には何も変更せずに) 変更すると、次のようになります。
LLVM ERROR: Program used external function 'my_cubic_transform' which could not be resolved
「-g」オプションを含めるようにメイクファイルを変更しても効果はありません。Kaleidoscope のチュートリアルでは、これが LLVM で可能であることが示唆されました (少なくとも、私が使用している JIT では)。それで、私は何か間違ったことをしていますか?もしそうなら、何?