C++ 調用三方so庫遇到的各種問題


C++ 調用so庫

最近接了一個需求,在我們的業務中調用第三方.so庫。

在JAVA代碼中通過jni調用時總是報錯無法完成初始化。

於是自己寫了一個c++的demo,通過自己的demo來發現問題出在哪里。

demo很簡單,貼下源碼:main.cpp

extern "C" void TKW_Hello();

int main(){
	TKW_Hello();
	return 0;
}

TKW_Hello();為三方.so庫提供一個方法,其實三方庫提供了很多方法,我先只驗證一個方法。

1.1、編譯C++命令

編譯命令:

g++ main.cpp libTKW_API.so -o main -pthread -lz

遇到的問題主要分為兩類根據不同的提示,看1.2和1.3。

注:

  • libTKW_API.so 為第三方提供的資源。

  • pthread和-lz為了依賴系統資源,不用從當前目錄加載。

  • 其實參數-pthread -lz也是遇到的問題,加上后就可以解決問題。

1.2、缺少依賴包 error while loading shared libraries: libmpfr.so.4:cannot open shared object file:No such file or directory

第一次編譯后提示缺少依賴包。提示如下圖:

image

1.2.1、通過命令查找所在安裝包

命令

yum whatprovides libmpfr.so.4

1.2.2、下載安裝包

通過官網下載缺省的包:mpfr-3.1.1-4.el7.i686

官網地址:https://vault.centos.org/7.5.1804/os/x86_64/Packages/

注意不同的系統版本官網地址不一樣,根據自身系統的版本查詢相應的地址。

注:下載時還要是根據應用的服務器下載對應的版本。

1.2.3、安裝安裝包

將下載的安裝包上傳到內網服務器上目錄中(我的目錄在software)。

在文件所在目錄執行安裝命令:

rpm -Uvh *.rpm --nodeps --force

安裝完成后再次執行我們的編譯命令,發現提示信息已經變了,說明我們安裝類庫成功。再根據提示解決相關的問題。

1.2.4、總結

遇到這么多依賴包的問題,其實就是gcc相關依賴包未安裝全的導致的。可以批量下載安裝。

1.3、錯誤:對'gzopen'未定義的引用

image

1.3.1、在線安裝zlib

wget http://zlib.net/zlib-1.2.11.tar.gz
tar zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11.tar.gz
./configure
make
make install

# 覆蓋原版本,可以先備份一下原版本
cp /usr/local/lib/libz.so.1 /lib/

在安裝zlib時也可能會報各種各樣的錯誤,解決問題主要有兩點:

  • 是安裝包是否統一為32位或者64位。
  • gcc多個依賴包的版本是否一致。


免責聲明!

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



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