2010-07-03 74 views
1

我最近開始在MinGW下試驗LLVM。我已閱讀Kaleidoscope教程,但現在我遇到外部功能問題。LLVM外部函數

我聲明瞭外部函數是這樣的:

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是模塊*和CTX是LLVMContext &。

在這種情況下,一切工作正常。 但是,如果我聲明瞭一個函數:

extern "C" 
double my_cubic_transform(double x) { 
    return x*x*x; 
} 

並使用「罪」使用「my_cubic_transform」改變SinFunction聲明(不改變其他任何東西),然後我得到:

LLVM ERROR: Program used external function 'my_cubic_transform' which could not be resolved 

更改我的makefile中包含「-g」選項沒有效果。 萬花筒教程建議這是可能的LLVM(至少對於JIT,我正在使用)。那麼我做錯了什麼?如果是這樣,什麼?

回答

4

沒關係,我想通了。我不得不使用__declspec(dllexport)來聲明my_cubic_transform。

編寫教程的人必須使用了其他__declspec不存在的平臺,因此沒有發現此問題。

+1

是的,可能是除Windows以外的任何平臺:) – jer 2010-07-06 21:30:09

+0

這很奇怪,我在Ubuntu上,並得到相同的錯誤 – altschuler 2013-06-21 11:21:49