c++程序(小白)
工作目录创建src目录,并创建codec.cpp和codec.h文件,内容如下
codec.h
#ifndef CODEC_LIBRARY_H
#define CODEC_LIBRARY_H
extern "C" int sum(int a, int b);
#endif //CODEC_LIBRARY_H
codec.cpp
#include "codec.h"
int sum(int a, int b) {
return a + b;
}
CMakeLists.txt文件
cmake_minimum_required(VERSION 3.13.4)
project(codec-process)
# 指定c++版本
set(CMAKE_CXX_STANDARD 14)
# 生成so文件
add_library(codec-process SHARED ${PROJECT_SOURCE_DIR}/src/codec.cpp)
# make install 安装so到lib目录,h头文件到include
install(TARGETS codec-process LIBRARY DESTINATION ${PROJECT_SOURCE_DIR}/lib)
install(FILES ${PROJECT_SOURCE_DIR}/src/codec.h DESTINATION ${PROJECT_SOURCE_DIR}/include)
环境&SO
在工作目录创建build目录并进入,运行cmake …/命令,运行make命令,运行make install命令,so文件就生成了
环境是deepin系统
配置环境变量,把so文件放在系统的某一个目录下,把该目录放到环境变量里
sudo vi /etc/profile
LD_LIBRARY_PATH=/opt/so
export LD_LIBRARY_PATH
设置profile生效
source /etc/profile
验证
echo $LD_LIBRARY_PATH
java文件内容
package ;
import com.sun.jna.Library;
import com.sun.jna.Native;
public class CLibrary {
public interface ICLibrary extends Library {
ICLibrary INSTANCE = (ICLibrary) Native.loadLibrary("codec-process", ICLibrary.class);
int sum(int a,int b);
}
public int sum(int a,int b){
return ICLibrary.INSTANCE.sum(a,b);
}
public static void main(String[] args) {
CLibrary cLibrary = new CLibrary();
int c = cLibrary.sum(10, 14);
System.out.println("10 + 14 = "+c);
}
}
代码验证
java已经调用成功,c++也调用成功