在linux中,la是使用libtool編譯出的函式庫文件,是記錄同名動態函式庫和靜態函式庫相關資訊的文字檔;該檔是透過libtool保存在平台之間的唯一文件。 libtool是一個通用函式庫支援腳本,只與後綴名為lo、la的libtool檔打交道。
本教學操作環境:linux7.3系統、Dell G3電腦。
la: 使用libtool編譯出的函式庫文件,其實是個文字文件,記錄同名動態函式庫和靜態函式庫的相關資訊
libtool的工作原理
libtool 是一個通用函式庫支援腳本,將使用動態函式庫的複雜性隱藏在統一、可移植的介面中;使用libtool的標準方法,可以在不同平台上建立並呼叫動態庫。可以認為libtool是gcc的一個抽象,其包裝了gcc(或其他的編譯器),使用者無需知道細節,只要告訴libtool需要編譯哪些函式庫即可,libtool將處理函式庫的依賴等細節。 libtool只與後綴名為lo、la為的libtool檔打交道。
擴充知識:
linux下的so、o、lo、a、la檔有什麼差別?
o: 編譯的目標檔
a: 靜態函式庫,其實就是把若干o檔打了個套件
so: 動態連結庫(共享庫)
lo: 使用libtool編譯出的目標文件,其實就是在o文件中加入了一些資訊
libtool主要的一個作用是在編譯大型軟體的過程中解決了函式庫的依賴問題;將繁重的函式庫依賴關係的維護工作承擔下來,從而釋放了程式設計師的人力資源。 libtool提供統一的接口,隱藏了不同平台間庫的名稱的差異等細節,生成一個抽象的後綴名為la高層庫libxx.la(其實是個文本文件),並將該庫對其它庫的依賴關係,都寫在該la的文件中。該檔案中的dependency_libs記錄該庫依賴的所有庫(其中有些是以.la檔案的形式加入的);libdir則指出了庫的安裝位置;library_names記錄了共享庫的名字;old_library記錄了靜態庫的名字。
當編譯過程到link階段的時候,如果有下面的指令:
$libtool --mode=link gcc -o myprog -rpath /usr/lib –L/usr/lib –la
libtool會到/usr/lib路徑下去尋找liba.la,然後從中讀取實際的共用函式庫的名字(library_names中記錄了該名字,例如liba.so)和路徑(lib_dir中記錄了,例如libdir='/usr/lib'),返回諸如/usr/lib/liba.so的參數給激發出的gcc命令列。
如果liba.so依賴函式庫/usr/lib/libb.so,則在liba.la中將會有dependency_libs='-L/usr/lib -lb'或dependency_libs='/usr/ lib/libb.la'的行,如果是前者,其將直接把“-L/usr/lib –lb”當作參數傳給gcc命令行;如果是後者,libtool將從/usr/lib/libb .la中讀取實際的libb.so的庫名稱和路徑,然後組合成參數“/usr/lib/libb.so”傳遞給gcc命令行。
相關推薦:《Linux影片教學》
以上是linux中la是什麼文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!