2010-07-03 5 views
1

저는 최근 MinGW에서 LLVM을 실험하기 시작했습니다. Kaleidoscope 자습서를 읽었으나 지금은 외부 함수에 문제가 있습니다. 모드는 * 모듈입니다LLVM extern functions

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); 

및 CTX는 LLVMContext &입니다 :

I는 다음과 같이 외부 함수를 선언하고있다.

이 경우 모든 것이 제대로 작동합니다. 나는 함수 선언하는 경우 그러나 :

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

신경 쓰지 마, 알아 냈어.

실행 파일 (exe)이 아닌 dll을 사용하더라도 __declspec (dllexport)로 my_cubic_transform을 선언해야한다는 것을 알 수 있습니다.

튜토리얼을 작성한 사람이라면 누구나 __declspec이 존재하지 않는 다른 플랫폼을 사용해야하고 따라서이 문제를 발견하지 못했을 것입니다.

+1

그래, 아마 windows 이외의 어떤 플랫폼 :) – jer

+0

그건 이상한데, 우분투에있어 같은 오류가 발생했습니다. – altschuler