C/C++ 開發中使用第三方庫常見問題總結


本篇包含linux 與 windows 下動態編譯問題,不涉及靜態編譯問題。

c++/c 編程中通常會經歷:編譯,鏈接和運行。

編譯:

*.cpp/*.c --> .o //源文件生成obj文件

除了語法錯誤以外,包含相應的頭文件即可編譯通過。

#windows: visual studio
項目-->屬性--> VC++目錄-->包含目錄-->添加相應的目錄

#linux 
g++ ...  -Ipath1 -Ipath2  ...

 當然,系統可以配置一些默認包含目錄。

鏈接:

將obj文件鏈接起來,並鏈接一些其他庫中的obj文件。

windows 下的連接文件:*.lib

linux 下的鏈接文件:*.so (shared object)。被稱之為共享函數庫,在鏈接和程序運行時都需要用到

1 windows visual studio

1 項目-->屬性-->VC++目錄-->庫目錄-->添加相應的目錄
2 項目-->屬性-->鏈接器-->輸入-->附加依賴項-->添加相應庫的文件名字

2 linux g++/gcc

-L LIB_PATH -l<libname> #libname 是*.so 文件去掉前綴lib和.so的名字 

linux 下默認鏈接庫路徑:

LIBRARY_PATH 

#注意和LD_LIBRARY_PATH的區別,LIBRARY_PATH是在編譯時需要的,
#LD_LIBRARY_PATH是在運行時需要的。

#添加方法三種:
1、當前shell有效: export $LIBRARY_PATH:<your path>
2、當前用戶有效: 將上面一局寫入 ~/.bashrc; source ~/.bashrc #激活

運行:

基本思想:exe文件要能找到相應的 dll 文件或者 .so 文件。

  1. 將所有的dll或者so文件copy到exe文件所在目錄下,注意:運行時的工作目錄不在這個文件下也是會出錯的,如/root/<dst to path>/*.exe ,會報找不到.so文件或者dll文件。
  2. 將dll或者so文件copy到系統目錄中,c:\windows\system* 或者 /usr/lib 等。
  3. windows下添加環境變量,linux 添加LD_LIBRARY_PATH,方法與LIBRARY_PATH 相似, 也可以添加到/etc/profile 里, 參考 這里

 


免責聲明!

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



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