linux大多數函數將默認頭文件放到/usr/include下,庫文件在/usr/lib目錄下
而windows使用的庫文件大多數放在VS 目錄的include和lib下,以及系統文件夾下
如果不在這些目錄下就必須鏈接庫文件
例如:我們現在有一個自己的include和lib文件夾分別是 /usr/dev/include和/usr/dev/lib,在lib文件夾下有一個二進制so文件,libmy.so(Linux下的庫文件分爲兩大類分別是動態鏈接庫(通常以.so結尾)和靜態鏈接庫(通常以.a結尾),二者的區別僅在於程序執行時所需的代碼是在運行時動態加載的,還是在編譯時靜態加載的)
- 首先我們要進行編譯test.c爲目標文件
gcc –c –I /usr/dev/include test.c –o test.o - 最後我們把所有目標文件鏈接成可執行文件
gcc –L /usr/dev/lib –libmy test.o –o test - 使用靜態鏈接庫
默認情況下, GCC在鏈接時優先使用動態鏈接庫,只有當動態鏈接庫不存在時才考慮使用靜態鏈接庫,如果需要的話可以在編譯時加上-static選項,強制使用靜態鏈接庫。
gcc –L /usr/dev/lib –static –libmy test.o –o test - 注:
靜態庫鏈接時搜索路徑順序:
1. ld會去找GCC命令中的參數-L
2. 再找gcc的環境變量LIBRARY_PATH
3. 再找內定目錄 /lib /usr/lib /usr/local/lib 這是當初compile gcc時寫在程序內的
動態鏈接時、執行時搜索路徑順序:
1. 編譯目標代碼時指定的動態庫搜索路徑
2. 環境變量LD_LIBRARY_PATH指定的動態庫搜索路徑
3. 配置文件/etc/ld.so.conf中指定的動態庫搜索路徑
4. 默認的動態庫搜索路徑/lib
5. 默認的動態庫搜索路徑/usr/lib
有關環境變量:
LIBRARY_PATH環境變量:指定程序靜態鏈接庫文件搜索路徑
LD_LIBRARY_PATH環境變量:指定程序動態鏈接庫文件搜索路徑