日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

【Linux】库文件

發布時間:2024/4/18 linux 88 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Linux】库文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 庫文件定義
    • 2. 庫文件查找命令
    • 3. 動態庫
        • 3.1 動態庫定義
        • 3.2 動態庫生成
    • 4. 靜態庫
        • 4.1 靜態庫定義
        • 4.2 靜態庫生成
    • 5. 動態庫和靜態庫區別

1. 庫文件定義

在我們寫代碼的的時候經常會用到很多頭文件,其實并不是用那些頭文件,而是告訴系統,我寫的寫個代碼需要幾個函數,而這幾個函數存在一個文件里,我已經把文件名也就是頭文件告訴系統了,系統會自動的去一個目錄下尋找有沒有這個文件。而這個目錄就是我們說的庫。你可以簡單的把它看成一個倉庫,因為它會提供給你一些可以直接拿來用的變量、函數或類。
庫實際上就是一段編譯好的二進制代碼,供系統在鏈接時鏈接調用。
一般存放在linux的usr/lib目錄下。

2. 庫文件查找命令

  • ldd:查看當前程序依賴的動態庫文件
    C動態庫:lib.so.6 => /usr/lib64.so.6

  • file:可以查看當前文件屬性

3. 動態庫

3.1 動態庫定義

動態庫又稱動態鏈接庫英文為DLL,是Dynamic Link Library 的縮寫形式,DLL是一個包含可由多個程序同時使用的代碼和數據的庫,DLL不是可執行文件。動態鏈接提供了一種方法,使進程可以調用不屬于其可執行代碼的函數。函數的可執行代碼位于一個 DLL 中,該 DLL 包含一個或多個已被編譯、鏈接并與使用它們的進程分開存儲的函數。DLL 還有助于共享數據和資源。多個應用程序可同時訪問內存中單個DLL 副本的內容。DLL 是一個包含可由多個程序同時使用的代碼和數據的庫。

3.2 動態庫生成

  • gcc/g++ -shared -fPIC test.c -o(后面生成的動態庫的名字)
    前綴:lib
    后綴:.so
    libabab.so => abab稱之為動態庫的名字

  • 編譯可執行程序的時候,一定要告訴編譯器,我們鏈接的動態庫是哪個!
    gcc main.c -o main
    指定鏈接動態庫所在的路徑:-L [path]
    指定鏈接動態庫的名字:-l[庫的名字] (去掉前綴和后綴的)

4. 靜態庫

4.1 靜態庫定義

程序編譯一般需經預處理、編譯、 匯編和鏈接幾個步驟。在我們的應用中,有一些公共代碼是需要反復使用,就把這些代碼編譯為“庫”文件;在鏈接步驟中,連接器將從庫文件取得所需的代碼,復制到生成的 可執行文件中。這種庫稱為靜態庫,其特點是 可執行文件中包含了庫代碼的一份完整拷貝;缺點就是被多次使用就會有多份冗余拷貝。

4.2 靜態庫生成

  • ar -rc lib[名字].a [依賴的文件]
    注意:依賴的文件不是源文件,而是.o文件
    前綴:lib
    后綴:.a
    libabab.a => abab就是靜態庫的名字
    gcc main.c -o main -L [path] -l[靜態庫名字]

5. 動態庫和靜態庫區別

靜態庫和動態庫是兩種共享程序代碼的方式,它們的區別是:靜態庫在程序的鏈接階段被復制到了程序中,和程序運行的時候沒有關系;動態庫在鏈接階段沒有被復制到程序中,而是程序在運行時由系統動態加載到內存中供程序調用。使用動態庫的優點是系統只需載入一次動態庫,不同的程序可以得到內存中相同的動態庫的副本,因此節省了很多內存。

總結

以上是生活随笔為你收集整理的【Linux】库文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。