我在fortran中有一个带有简单void RESET()
函数的Fifp.dll,并尝试从我的Java代码中调用它。
我做了一个简单的java测试类:
public class TestJni {
static {
System.loadLibrary("Fifp");
}
public native void RESET();
}
我从中创建了一个.h文件,然后编译它。 我还制作了一个桥文件myBridge.c:
#include <stdio.h>
#include "TestJni.h"
extern void RESET();
JNIEXPORT void JNICALL Java_TestJni_RESET(JNIEnv *env, jobject obj) {
printf("Before DLL call\n");
RESET();
printf("After DLL call\n");
}
现在我无法编译它。这是我在Visual Studio x64命令提示符中尝试的命令:
> cl -I"C:\path\to\jdk\include\win32" -I"C:\path\to\jdk\include" myBridge.c
并且还有-FeFifp.dll
选项,它会给我同样的错误:
LNK2019: unresolved external symbol RESET (and main)
那么我做错了什么?
是否有指定外部dll包含的选项?
我是否以正确的方式执行new TestJni().RESET()
电话?
任何帮助表示赞赏...
答案 0 :(得分:4)
为预构建的Fortran DLL准备Fifp.DEF文件。
LIBRARY Fifp.dll
EXPORTS
RESET
从DEF创建LIB。
lib /def:Fifp.DEF /OUT:Fifp.lib
从myBridge.c和Fifp.LIB构建FifpBridge.dll。
cl /LD myBridge.c /link Fifp.LIB
将Java语句更改为loadLibrary(&#34; FifpBridge&#34;)。该桥将在没有您干预的情况下加载Fortran DLL。