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