编译
1,用 vs打开
2,创建一个空的 config_site.h 文件
你可以尝试着
3,编译pjsua项目
4,编译swig_java-pjsua2项目
参考:https://docs.pjsip.org/en/latest/pjsua2/building.html#building-java-swig-module
其实我感觉没必要安装swig
java版本说明
咱们编译的pjsua2.dll 可以有32位和64位的区别。
那么调用的时候也要注意java 32位和64位的区别。
当生成jar包之后,使用
"D:\Program Files\Java\jdk1.8.0_291\bin\java.exe" -jar .//test1.jar
"D:\Program Files (x86)\Java\jdk-1.8\bin\java.exe" -jar .//test1.jar
那么test1.jar 所依赖的dll版本是不一样的。
再我看来 java程序没有32位还是64位的区别。使用哪个版本的 java.exe 调用,就算是哪个版本的程序。
dll 路径
static {
System.out.println("java.library.path:"+System.getProperty("java.library.path"));
String path1 = System.getProperty("java.library.path");
String path2 = System.getProperty("user.dir");
System.out.println("user.dir:"+path2);
//系统 Windows 或者 Linux
String osName = System.getProperties().getProperty("os.name").toLowerCase();
//架构 x86 或者 amd64
String osArch = System.getProperties().getProperty("os.arch").toLowerCase();
System.out.println("This OS is: " + osName + ";" + osArch);
String dllFileName = "unknown.dll";
if (osArch.indexOf("64") != -1){
if (osName.indexOf("win") != -1){
dllFileName = "pjsua2.dll";
}
else {
dllFileName = "unknown.dll";
}
}else if (osArch.indexOf("86") != -1){
if (osName.indexOf("win") != -1){
dllFileName = "pjsua2_x86.dll";
}else{
dllFileName = "unknown.dll";
}
}else {
dllFileName = "unknown.dll";
}
String dllFilePath = System.getProperty("user.dir") + File.separator + dllFileName;
System.out.println("dll file path:" + dllFilePath);
// System.load("E:/testPjsipJava/javaDemo/test1/libs/pjsua2.dll");
System.load(dllFilePath);
System.out.println("Library loaded");
}
也不知道他们加载 dll 使用
System.loadLibrary("pjsua2");
是怎么成功的,也许他们使用了idea的环境变量
生成jar文件
把java项目打包成jar包
只会将java相关的文件包含进去,自己的dll还是被放在外面
jar转成exe
用exe4j把jar包加工成exe文件,目前还没发现什么别的方法
参考
总结
java 生成的jar包,所依赖的dll版本(32位还是64位),跟java.exe的版本有关系。