zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    PAT:1002. 写出这个数 (20) AC
    PAT:1031. 查验身份证(15) AC
    PAT:1021. 个位数统计 (15) AC
    NSDate
    iOS程序的生命的周期
    Swift swith语句
    Swift 循环语句
    Swift 基本运算符
    Swift 解包
    Swift 可选类型(补充)
  • 原文地址:https://www.cnblogs.com/zxcoder/p/12144646.html
Copyright © 2011-2022 走看看