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