Linux下制作C++動態庫


動態鏈接庫是程序運行時加載的庫,當動態鏈接庫正確部署之后,運行的多個程序可以使用同一個加載到內存中的動態庫,因此在 Linux 中動態鏈接庫也可稱之為共享庫。動態鏈接庫是目標文件的集合,目標文件在動態鏈接庫中的組織方式是按照特殊方式形成的。庫中函數和變量的地址使用的是相對地址(靜態庫中使用的是絕對地址),其真實地址是在應用程序加載動態庫時形成的。

關於動態庫的命名規則如下:

  1)在 Linux 中動態庫以 lib 作為前綴,以.so 作為后綴,中間是庫的名字自己指定即可,即: libxxx.so

  2)在 Windows 中動態庫一般以 lib 作為前綴,以 dll 作為后綴,中間是庫的名字需要自己指定,即: libxxx.dll

生成動態鏈接庫是直接使用 g++ 命令並且需要添加 -fPIC(-fpic) 以及 -shared 參數。

  1)-fPIC 或 -fpic 參數的作用是使得 g++ 生成的代碼是與位置無關的,也就是使用相對位置。

  2)-shared參數的作用是告訴編譯器生成一個動態鏈接庫。

生成動態鏈接庫的具體步驟如下:

一、將源文件進行匯編操作,需要使用參數 -c, 還需要添加額外參數 -fpic /-fPIC,得到若干個 .o文件:

  $ g++ 源文件(*.cpp) -c -fpic

二·、將得到的.o 文件打包成動態庫,還是使用 g++, 使用參數 -shared 指定生成動態庫 (位置沒有要求)

  $ g++ -shared 與位置無關的目標文件(*.o) -o 動態庫(libxxx.so)

三、發布動態庫和頭文件

  1)提供頭文件: xxx.h

  2)提供動態庫: libxxx.so

四、動態庫的使用

當我們得到了一個可用的動態庫之后,需要將其放到一個目錄中,然后根據得到的頭文件編寫測試代碼,對動態庫中的函數進行調用。

1)拿到發布的動態庫

  `head.h libcalc.so

2)基於頭文件編寫測試程序, 測試動態庫中提供的接口是否可用

  `main.cpp`

3)編譯測試程序

  $ g++ main.cpp -o app


免責聲明!

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



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