1

我已经能够使用一个 C 文件使 JNI 示例在 OSX 上工作,例如在本教程中。但是当我尝试创建一个链接到其他 C 文件的 makefile 时,我得到了可怕的“UnsatisfiedLinkError”。

这是我在github中的makefile 。

这是键入“make java”的结果:

gcc -c -Wall -Os -std=gnu99 -I -fnested-functions -fms-extensions -DDEBUG vm.c -o vm.o
gcc -c -Wall -Os -std=gnu99 -I -fnested-functions -fms -extensions -DDEBUG struct.c -o struct.o
gcc -c -Wall -Os -std=gnu99 -I -fnested-functions -fms-extensions -DDEBUG serial.c -o serial.o
gcc -c -Wall -Os -std=gnu99 -I -fnested-functions -fms-extensions -DDEBUG compile.c -o compile.o
gcc -c -Wall -Os -std=gnu99 -I -fnested-functions -fms-extensions -DDEBUG util.c -o util.o
gcc -c -Wall -Os -std=gnu99 -I -fnested-functions -fms-extensions -DDEBUG sys.c -o sys.o
gcc -c -Wall -Os -std=gnu99 -I - fnested-functions -fms-extensions -DDEBUG variable.c -o variable.o
gcc -c -Wall -Os -std=gnu99 -I -fnested-functions -fms-extensions -DDEBUG translate.c -o translate.o
gcc -c -Wall -Os -std=gnu99 -I -fnested-functions -fms -extensions -DDEBUG hal_stub.c -o hal_stub.o
gcc -c -Wall -Os -std=gnu99 -I -fnested-functions -fms-extensions -DDEBUG node.c -o node.o
gcc -c -Wall -Os -std=gnu99 -I -fnested-functions -fms-extensions -DDEBUG file.c -o file.o
javac javagree.java
javah -jni javagree
cc -c -fPIC -I/System/Library/Frameworks/JavaVM.framework/头文件 javagree.c -o libjavagree.o
libtool -dynamic -lSystem vm.o struct.o serial.o compile.o util.o sys.o variable.o interpret.o
hal_stub.o node.o file.o libjavagree.o -o libjavagree.dylib -macosx_version_min 10.8

$ java javagree
线程“main”中的异常 java.lang.UnsatisfiedLinkError: javagree.filagree(Ljava/lang/Object;[Ljava/lang/Object;)J
at javagree.filagree(Native Method)
at javagree.main(javagree.java :46)

问题是:为什么当我链接更多文件时它无法找到该功能?我没有正确链接吗?

4

0 回答 0