【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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM