나는 llvm-fs 바인딩을 사용하고 있는데, 호출하고자하는 한 가지 방법은 LLVM C API의 네이티브 메소드 LLVMCreateJITCompilerForModule
의 extern 인 createJITCompilerForModule
입니다.F #에서이 네이티브 함수를 어떻게 호출 할 수 있습니까? (LLVMCreateJITCompilerForModule)
createJITCompilerForModule in llvm-fs:Generated.fs
:
[<DllImport(
"LLVM-3.1.dll",
EntryPoint="LLVMCreateJITCompilerForModule",
CallingConvention=CallingConvention.Cdecl,
CharSet=CharSet.Ansi)>]
extern bool createJITCompilerForModuleNative(
void* (* LLVMExecutionEngineRef* *) OutJIT,
void* (* LLVMModuleRef *) M,
uint32 OptLevel,
void* OutError)
// I don't know how to generate an "F# friendly" version of LLVMCreateJITCompilerForModule
당신은 내가 F 번호에서이 함수를 호출 할 방법을 알고 있나요 LLVM-FS의 저자는 그가 F 번호에서이 함수 호출의 '좋은'버전을 만들 수 없습니다 진술했다 , 심지어 원주민이하는 일은 무엇입니까?
OutJIT
에 'out 매개 변수'가있는 것 같습니다 (기본 코드는
void*
가 가리키는 점을 다시 지정 함).
LLVMCreateJITCompilerForModule in llvm-c:ExecutionEngineBindings.cpp
: 다음은 기본 기능입니다
LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT,
LLVMModuleRef M,
unsigned OptLevel,
char **OutError) {
std::string Error;
EngineBuilder builder(unwrap(M));
builder.setEngineKind(EngineKind::JIT)
.setErrorStr(&Error)
.setOptLevel((CodeGenOpt::Level)OptLevel);
if (ExecutionEngine *JIT = builder.create()) {
*OutJIT = wrap(JIT);
return 0;
}
*OutError = strdup(Error.c_str());
return 1;
}
당신이 (다만 보통의 함수로) 명백한 방법으로 F 번호에서 호출 시도 유무 : 나는 그것을 호출하는 방법의 예를 여기에 넣어거야? 모든 것이 정확하다고 보입니다. –
구체적으로 귀하의 질문은 무엇입니까? 'void * '에 대해 무엇을 전달해야합니까? 아마도'nativeint' 일 가능성이 높습니다. – Daniel