Я недавно начал экспериментировать с LLVM под MinGW.Я прочитал учебник 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 isМодуль * и 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
Изменение моего make-файла для включения опции "-g" не дает никакого эффекта.В учебнике по калейдоскопу предполагается, что это возможно в LLVM (по крайней мере, для JIT, который я использую).Так я что-то не так делаю?Если так, то что?