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

假設文件內容以下:api

+main.cpp         //源文件bash

+ZY_FtdcMdApi.cpp   //源文件spa

+ZY_FtdcMdApi.h   //頭文件blog

traderapi                     //子文件夾源碼

   ++apiheader.h       //頭文件 io

   ++libthostmduserapi.so      //動態連接庫編譯

 

那麼編譯過程是:class

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

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

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

-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」中問題。挺好的。

相關文章
相關標籤/搜索