Tie*_*rce 1 java windows java-native-interface fortran
我在fortran中有一个具有简单void RESET()功能的Fifp.dll,并尝试从我的Java代码中调用它。我做了一个简单的java测试类:
public class TestJni {
static {
System.loadLibrary("Fifp");
}
public native void RESET();
}
Run Code Online (Sandbox Code Playgroud)
我从中制作了一个.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");
}
Run Code Online (Sandbox Code Playgroud)
现在,我无法编译它。这是我在Visual Studio x64命令提示符下尝试的命令:
> cl -I"C:\path\to\jdk\include\win32" -I"C:\path\to\jdk\include" myBridge.c
Run Code Online (Sandbox Code Playgroud)
并且还有一个-FeFifp.dll选项,它给了我相同的错误:
LNK2019:无法解析的外部符号RESET(和main)
那么我在做什么错呢?
是否可以指定要包含的外部dll?
我是否以正确的方式执行new TestJni().RESET()呼叫?
任何帮助表示赞赏...
为预构建的Fortran DLL准备一个Fifp.DEF文件。
LIBRARY Fifp.dll
EXPORTS
RESET
Run Code Online (Sandbox Code Playgroud)从DEF创建LIB。
lib /def:Fifp.DEF /OUT:Fifp.lib
Run Code Online (Sandbox Code Playgroud)从myBridge.c和Fifp.LIB构建FifpBridge.dll。
cl /LD myBridge.c /link Fifp.LIB
Run Code Online (Sandbox Code Playgroud)将Java语句更改为loadLibrary(“ FifpBridge”)。该桥将在无需您干预的情况下加载Fortran DLL。
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |