假設文件內容以下: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」中問題。挺好的。