哪个g++;编译java动态链接文件时应选择哪些参数?

哪个g++;编译java动态链接文件时应选择哪些参数?,java,c++,java-native-interface,Java,C++,Java Native Interface,我用g++编译了一个JNI文件: g++ -shared -o test.so test.cpp -fPIC java找不到符号: com_idp_common_util_J:java.lang.unsatifiedlinkerror: com.idp.common.util.J 当我使用“readelf”读取动态链接文件符号时,它似乎很奇怪: 0000000000000 DCC 274 FUNC全局默认值11 _Z44com_idp_common_util_J 这是什么意思?动态链接文件生

我用g++编译了一个JNI文件:

g++ -shared -o test.so test.cpp -fPIC 
java找不到符号:

com_idp_common_util_J:java.lang.unsatifiedlinkerror: com.idp.common.util.J

当我使用“readelf”读取动态链接文件符号时,它似乎很奇怪:

0000000000000 DCC 274 FUNC全局默认值11 _Z44com_idp_common_util_J


这是什么意思?动态链接文件生成的正确方法是什么?

< P>。这里,我们可以从JNI:< /P>中使用基于C++的示例。

对于代码,这一行应该足够了。但一定要遵循JNI命名约定的严格规则

g++ -g -shared -fpic -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux source.cpp -o lib/libName.so
在上面的示例中,您将看到如何生成遵循JNI规则的头文件:

请看一节:解析本机方法名称

您可以使用javah工具轻松地生成它

$(JAVA_HOME)/bin/javah -jni -cp target JavaClass

您是否使用由
javah
生成的头文件?是否可以粘贴整个异常?可能问题与链接到您的JNI库的共享库有关?我曾尝试添加JDK include DIR,但结果相同。此问题已得到解决。这是名称混乱,我的外部“C”使用不正确。另一个问题是我的JNI方法缺少“Java_2;”Yeap,使用javah总是生成这些讨厌的、奇怪的JNI头的简单方法。