Linux JNI未满足链接错误:找到库,但可以';t绑定到函数点
System.load找到了共享库,但现在看来函数调用的签名是错误的 主要类别:Linux JNI未满足链接错误:找到库,但可以';t绑定到函数点,linux,java-native-interface,clion,Linux,Java Native Interface,Clion,System.load找到了共享库,但现在看来函数调用的签名是错误的 主要类别: package java_main; /** * * @author james */ public class Main { static { System.out.println("static one"); System.load("/home/james/Desktop/NewApiWork_scratch/build/Debug/libmodule.so")
package java_main;
/**
*
* @author james
*/
public class Main {
static {
System.out.println("static one");
System.load("/home/james/Desktop/NewApiWork_scratch/build/Debug/libmodule.so");
System.out.println("static two");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Main ma = new Main();
System.out.println("public static void main(String[] args)");
try
{
ma.MAIN();
}
catch (Throwable e)
{
if (e.getCause() != null)
{
System.out.printf("Cause: %s\n", e.getCause().toString());
}
System.out.println(e.getMessage());
e.printStackTrace(System.out);
}
}
public native void MAIN();
}
main.c文件:
//
// Created by James on 8/30/2015.
//
#include "main.h"
#include <stdio.h>
/*
* Class: java_main_Main
* Method: MAIN
* Signature: ()V
*/
JNIEXPORT void JNICALL _Java_java_1main_Main_MAIN
(JNIEnv *env, jobject obj) {
puts("Java_java_1main_Main_MAIN");
}
我正在Linux上使用CLion
我对正在发生的事感到不知所措。
当我得到更多的反馈时,我会补充更多的问题
更新
它是标识符上的前导下划线。在windows中,Java无法正确识别stdcall,您必须在导出的函数中添加一个前导下划线。我所做的就是删除前导下划线
更新到更新
这可能是mingw的东西,而不是Java。不久前我处理过这个问题,我记不起责任方。以及如何编辑这个问题。我可以通过手机进行编辑。刚刚找到编辑超链接
/usr/bin/java -Djava.library.path=./build/Debug -cp .:javastubs_16 java_main.Main
static one
static two
public static void main(String[] args)
java_main.Main.MAIN()V
java.lang.UnsatisfiedLinkError: java_main.Main.MAIN()V
at java_main.Main.MAIN(Native Method)
at java_main.Main.main(Main.java:27)