【C++】将调用第三方库的代码封装成动态库供上层调用
需求分析
Java应用中需要调用C++的程序,而这个C++的程序中需要引入一个第三方静态库。所以需要将该程序编译成一个动态库文件(.so)供Java调用。
步骤
- 使用CLion创建一个动态库的项目,会自动生成头文件,源文件和Cmake文件。

- 头文件在使用so文件的时候也要用到,里面包含源文件中所有函数签名。
- 源文件有具体的函数,也就是在这里调用第三方库的一些函数封装成一个新的函数。
- Cmake文件用来编译成so动态库文件,主要有以下几个部分。
cmake_minimum_required(VERSION 3.15)
project(sealNative)
set(CMAKE_CXX_STANDARD 14)
find_package(SEAL 3.4.5 EXACT REQUIRED)
link_libraries(SEAL::seal)
add_library(sealNative SHARED library.cpp library.h)
其中最重要的就是后面三行,简单来说,find_package是找到依赖库,就是这里的第三方静态库libseal.a,然后link_libraries是把这个静态库链接到项目中,如果项目是可执行文件的项目,这里就改成target_link_libraries,最后add_library是指要生成so动态库文件。
- 在Clion中Build->Build Project即可。
- 写一个测试的源文件test.cpp
#include <iostream>
//引入动态库对应的头文件
#include <library.h>
using namespace std;
int main(){
//动态库中的方法,其中调用了第三方库
generateKey();
return 0;
}
- 把生成的.so文件复制到/usr/lib/下,把头文件复制到test.cpp同目录下。
g++ -o test test.cpp -L./ -lsealNative && ./test,如果能正确执行方法,说明没问题,其中的-lsealNative需要根据生成的动态库的名称决定,这里的动态库文件全名是libsealNative.so。
github地址
https://github.com/Zeng1998/sealNative
【C++】将调用第三方库的代码封装成动态库供上层调用的更多相关文章
- C# 将 WebService 封装成动态库
C# 将 WebService 封装成动态库 服务与服务之间的远程调用,经常会通过Web Service来实现,Web Service是支持跨语言调用的,可以是java调用c++或c#调用java等, ...
- 54.Qt-将界面程序封装成动态库DLL
1.生成dll 然后选择创建共享库: 创建好后,修改pro文件,改为下面两句(这样就可以创建界面了): 然后修改sharedlib.h: #ifndef SHAREDLIB_H #define SH ...
- faster_rcnn c++版本的 caffe 封装,动态库(2)
摘要: 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ github上的代码链接,求给星星:) https:// ...
- Android导入第三方静态库.a编译成动态库.so
http://ikinglai.blog.51cto.com/6220785/1324985 在Android开发的时候,经常会使用到用c或c++编写的第三方的静态库.如果有源码的话,可以直接跟你自己 ...
- 将自己写的HDL代码封装成带AXI总线的IP
将自己写的HDL代码封装成带AXI总线的IP 1.Tools->create and package IP 2.create AXI4总线的IP 3.新建block design 4.点击右键, ...
- python 日志的配置,python对日志封装成类,日志的调用
# python 日志的配置,python对日志封装成类,日志的调用 import logging # 使用logging模块: class CLog: # --------------------- ...
- 表格树控件QtTreePropertyBrowser编译成动态库(设计师插件)
目录 一.回顾 二.动态库编译 1.命令行编译动态库和测试程序 2.vs工具编译动态库和测试程序 3.安装文档 4.测试文档 三.设计师插件编译 1.重写QDesignerCustomWidgetIn ...
- 将pugixml库编译成动态库的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 pugixml库默认是编译成静态库的.要把pugixml库编译成一个动态库,需要对代码做一些修改,具体是将 // If ...
- 如何将Js代码封装成Jquery插件
很多相同的Jquery代码会在很多页面使用,每次都复制粘贴太麻烦了,不如封装成一个Jquery插件就方便了,至于影响网页的速度不,我就没有测试了哈. 代码如下 这是一个自定闪烁打印文字的Jquery特 ...
随机推荐
- bzoj 4386: [POI2015]Wycieczki
bzoj 4386: [POI2015]Wycieczki 这题什么素质,爆long long就算了,连int128都爆……最后还是用long double卡过的……而且可能是我本身自带大常数吧,T了 ...
- input上传图片并预览
首先说一下input 大家都知道上传文件,图片是通过input 的file进行上传的. 1. 首先是样式 大家都知道input在HTML的代码为 <input type="file&q ...
- H3C 网络接口层
- input 的 pattern 验证表单
pattern 用于定义验证输入正则表达式 pattern 属性适用于以下 <input> 类型:text, search, url, telephone, email 以及 passwo ...
- js实现点击隐藏图片
方法一: 把图片的display设为none,触发点击事件时,display变为block <style> img { width: 400px;height: 300px; displa ...
- tf.variance_scaling_initializer() tensorflow学习:参数初始化
CNN中最重要的就是参数了,包括W,b. 我们训练CNN的最终目的就是得到最好的参数,使得目标函数取得最小值.参数的初始化也同样重要,因此微调受到很多人的重视,那么tf提供了哪些初始化参数的方法呢,我 ...
- H3C 配置基本ACL
- python模块之hashlib模块
hashlib模块:提供摘要算法 格式: hashlib格式: obj = hashlib.算法(md5,sha....) obj.update(摘要内容:bytes类型) result = obj. ...
- 洛谷 P1972"[SDOI2009]HH的项链"(离线+树状数组 or 在线+主席树)
传送门 •题意 给你一个包含 n 个数的数组 $a$: 有 m 此操作,每次操作求区间 [l,r] 中不同数的个数: •题解(离线+树状数组) 以样例 $[1,2,3,4,3,5]$ 为例,求解区间 ...
- 【p083】传球游戏
Time Limit: 1 second Memory Limit: 50 MB [问题描述] 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样 ...