Linux G++如何使用動態鏈接庫


假設文件內容如下:

+main.cpp         //源文件

+ZY_FtdcMdApi.cpp   //源文件

+ZY_FtdcMdApi.h   //頭文件

traderapi                     //子文件夾

   ++apiheader.h       //頭文件 

   ++libthostmduserapi.so      //動態鏈接庫

 

那么編譯過程是:

g++ -o m main.cpp ZY_FtdcMdApi.cpp -I./traderapi/ -L./traderapi -lthostmduserapi

-I./traderapi/是源碼中使用到的頭文件的路徑

-L./traderapi 是使用到的動態鏈接庫的路徑

-lthostmduserapi 是動態鏈接庫,注意動態鏈接庫本身必須是libXXXX.so這種寫法,編譯的時候省略"lib"和".so"

 

 

補錄1:

運行的時候有可能可執行文件m找不到動態鏈接庫,出現如下錯誤:

./m: error while loading shared libraries: libthostmduserapi.so: cannot open shared object file: No such file or directory

這是因為程序默認會到/lib64/目錄中找動態鏈接庫,而程序中所使用的的thostmduserapi.so不在/lib64/中。因此需要增加如下命令,讓程序也到指令的目錄中找庫

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./traderapi

 

補錄2:

如果不喜歡-lthostmduserapi這種寫法,或者不習慣動態鏈接庫的lib打頭。也可以將lib去掉,直接攜程XXXX.so只是編譯的時候,需要將動態鏈接庫當做.cpp文件來編譯。

假設動態鏈接庫的名字是thostmduserapi.so,那么編譯命令:

g++ -o m main.cpp ZY_FtdcMdApi.cpp ./traderapi/thostmduserapi.so -I./traderapi/ 

且這種方法不會發生“補錄1”中問題。挺好的。

 


免責聲明!

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



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