linux-c---鏈接庫文件

linux大多數函數將默認頭文件放到/usr/include下,庫文件在/usr/lib目錄下

而windows使用的庫文件大多數放在VS 目錄的include和lib下,以及系統文件夾下

如果不在這些目錄下就必須鏈接庫文件

例如:我們現在有一個自己的include和lib文件夾分別是     /usr/dev/include和/usr/dev/lib,在lib文件夾下有一個二進制so文件,libmy.so(Linux下的庫文件分爲兩大類分別是動態鏈接庫(通常以.so結尾)和靜態鏈接庫(通常以.a結尾),二者的區別僅在於程序執行時所需的代碼是在運行時動態加載的,還是在編譯時靜態加載的)

  1. 首先我們要進行編譯test.c爲目標文件
    gcc –c –I /usr/dev/include test.c –o test.o
  2. 最後我們把所有目標文件鏈接成可執行文件
    gcc –L /usr/dev/lib –libmy test.o –o test
  3. 使用靜態鏈接庫
    默認情況下, GCC在鏈接時優先使用動態鏈接庫,只有當動態鏈接庫不存在時才考慮使用靜態鏈接庫,如果需要的話可以在編譯時加上-static選項,強制使用靜態鏈接庫。
    gcc –L /usr/dev/lib –static –libmy test.o –o test
  4. 注:
    靜態庫鏈接時搜索路徑順序:
    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環境變量:指定程序動態鏈接庫文件搜索路徑

發佈了81 篇原創文章 · 獲贊 15 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章