我已经能够使用一个C文件使JNI样本在OSX上运行,例如在this tutorial中。但是当我尝试创建一个链接在其他C文件中的makefile时,我得到了可怕的“UnsatisfiedLinkError”。
github中的这是输入“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 interpret.c.o interpre.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 / Headers 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
在javagree.filagree(原生方法)
在javagree.main(javagree.java:46)
问题是:当我链接更多文件时为什么不能找到该功能?我没有正确链接吗?