对'JNI_CreateJavaVM';的未定义引用;linux 我试图熟悉JNI API,但不能得到一个C++程序的编译。
这是我用来编译的命令,下面是我试图编译的程序。我得到的错误是:对'JNI_CreateJavaVM';的未定义引用;linux 我试图熟悉JNI API,但不能得到一个C++程序的编译。,c++,java-native-interface,C++,Java Native Interface,这是我用来编译的命令,下面是我试图编译的程序。我得到的错误是: /tmp/cczyqqyL.o: In function `main': /home/nc/Desktop/jni/simple/ctojava/callJava.cpp:16: undefined reference to `JNI_CreateJavaVM' 汇编: g++ -g -I/usr/lib/jvm/java-7-oracle/include/ -I/usr/lib/jvm/java-7-oracle/include
/tmp/cczyqqyL.o: In function `main':
/home/nc/Desktop/jni/simple/ctojava/callJava.cpp:16: undefined reference to `JNI_CreateJavaVM'
汇编:
g++ -g -I/usr/lib/jvm/java-7-oracle/include/ -I/usr/lib/jvm/java-7-oracle/include/linux/ -L/usr/bin/java -L/usr/lib/jvm/java-7-oracle/jre/lib/amd64/server/ -ljvm callJava.cpp
C++:
GCC查找符号的方式最近发生了相当大的变化:现在要链接的单元严格地从左到右进行处理,如果命令行中左侧的库不需要它们,则对库(
-lYourLibrary
)的引用将被默默忽略
要解决此问题,请将-ljvm
移到使用它的编译单元之后,例如移到命令行的最末端:
g++ -g -I/usr/lib/jvm/java-7-oracle/include/ -I/usr/lib/jvm/java-7-oracle/include/linux/ \
-L/usr/bin/java -L/usr/lib/jvm/java-7-oracle/jre/lib/amd64/server/ callJava.cpp -ljvm
这将有助于:
LD_LIBRARY_PATH=/usr/lib/jvm/java-7-oracle/jre/lib/amd64/server ./a.out
g++ -g -I/usr/lib/jvm/java-7-oracle/include/ -I/usr/lib/jvm/java-7-oracle/include/linux/ \
-L/usr/bin/java -L/usr/lib/jvm/java-7-oracle/jre/lib/amd64/server/ callJava.cpp -ljvm