LLVM внешние функции - PullRequest
       7

LLVM внешние функции

1 голос
/ 03 июля 2010

Я недавно начал экспериментировать с 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, который я использую).Так я что-то не так делаю?Если так, то что?

1 Ответ

4 голосов
/ 03 июля 2010

Не берите в голову, я понял это.

Оказывается, что хотя я использую исполняемый файл (exe), а не dll, я должен объявить my_cubic_transform с __declspec (dllexport).

Тот, кто написал учебник, использовал другую платформу, где __declspec не существует, и, следовательно, не нашел этой проблемы.

...