導航:首頁 > 源碼編譯 > lib文件是編譯生成的嗎

lib文件是編譯生成的嗎

發布時間:2023-03-22 18:43:05

java中lib.jpg文件時自動生成還是自己編譯的啊

導包嗎?如果是的話就是自動生成的。我們只需要導入驅動就可以了,應為驅動是第三方提供的,不是程序員寫的。我們只需要導入相應的驅動就可以了。用這種方式可以提高程序的靈活形,你如果切換不同的第三方提供的程序就只需要導入相應的包,而不是針對每種第三方軟體都寫一個對應的代碼。

❷ 很多編譯器都有個LIB文件夾,裡面有很多.lib文件,它們的作用是什麼

.lib文件是程序的二進制庫文件,編譯器連接程序是一般會用到.
如:
main()
{
printf("abc");
}
在這個程序中,你是不用編寫輸出函數代碼的,直接調用printf()函數的就可以輸出字元串了.printf()函數的二進制代碼就是在.lib文件中,只是程序編譯後,把它的二進制代碼加到了本常式序中.
在TC2.0下,.lib文件可以用tlib.exe程序建立.

❸ C語言如何生成庫文件

有一些代碼,我們編程時經常用到,或者我們對某些部分很熟悉,並寫出了一些可用的介面。這時,我們會考慮把這些c文件做成一個lib庫,以方便自己使用,或這給別人調用。
我這里介紹下在vc++6.0下如何來製作靜態庫:
第一步:創建一個工程,選擇Win32Static
Library,輸入工程名。這時就創建好了。
第二步:工程創建好了,再點擊新建,這時選擇文件,選擇c++
source
file選項,創建一個.c
文件。
在這個文件中,你可以寫入你要做成庫的c函數。當然,可以繼續創建其他c文件,然後將要供蘆告外部使用的介面單獨放到頭文件中,一般而言,一個c文件對應一個頭文件。
第三步:完成以上步驟後,我們就可以生成庫了。事實上,我們點擊編譯即可,這時就可以生成.lib文件了。
一般情況下,是可以正常生成lib文件殲嘩宏的。有頭文件和lib文件就可以給別人用了。然後我們可以寫一個測試函數來試試可不可以使用。
要調用生成的lib中的函數,就要引入頭函數。這時,你把lib和頭文件放入當前工程中,但build的時候卻顯示了連接錯氏冊誤。那是因為你沒有把lib文件包含進來。加入下面這句話即可了:
#pragma
comment(lib,
"mylib.lib
")
Ok,自己的lib庫就這樣做成了。以後可以隨便調用了

❹ files和lib是不是相同

makefile
dll和lib文件的區別

vanezuo
原創
關注
0點贊·591人閱讀

版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明http://billjeff.blogbus.com/logs/7497042.html

(1)lib是編譯時需要的,dll是運行時需要的。
如果要完成源代碼的編譯,有lib就夠了。
如果也使動態連接的程序運行起來,有dll就夠了。
在開發和調試階段,當然最好都有。
(2) 一般的閉沖襲動態庫程序有lib文件和dll文件。lib文件是必須在編譯期就連接到應用程序中的,而dll文件是運行期才會被調用的。如果有dll文件,那麼 對應的lib文件一般是一些索引信息,具體的實現在dll文件中。如果只有lib文件,那麼這個lib文件是靜態編譯出來的,索引和實現都在其中。靜態編 譯的lib文件有好處:給用戶安裝時就不需要再掛動態庫了。但也有缺點,就是導致應用程序比較大,而且失去了動態庫的靈活性,在版本升級時,同時要發布新 的應用程序才行。
(3)在動態庫的情況下,有兩個文件,一個是引入庫(判州.LIB)文件,一個是DLL文件,引入庫文件包含被DLL導出的函數 的名稱和位置,DLL包含實際的函數和數據,應用程序使用LIB文件鏈接到所需要使用的DLL文件,庫中的函數和數據並不復制到可執行文件中,因此在應用 程序的可執行文件中,存放的不是被調用的函數代碼,而是DLL中所要調用的函數的內存地址,這樣當一個或多個應用程序運行是再把程序代碼和被調用的函數代 碼鏈接起來,從而節省了內存資源。從上面的說明可以看出,DLL和.LIB文件必須隨應用程序一起發行,否則應用程序將會產生錯誤。

(以下是另外一轎兄篇文章的內容)

1、引言
動態庫(Dynamic Link Library abbr,DLL)技術是程序設計中經常採用的技術。其目的減少程序的大小,節省空間,提高效率,具有很高的靈活性。採用動態庫技術對於升級軟體版本更加容易。與靜態庫(Static Link Library)不同,動態庫裡面的函數不是執行程序本身的一部分,而是根據執行需要按需載入,其執行代碼可以同時在多個程序中共享。
在Windows和linux操作系統中,都可採用這種方式進行軟體設計,但他們的調用方式以及程序編制方式不盡相同。本文首先分析了在這兩種操作系統中 通常採用的動態庫調用方法以及程序編制方式,然後分析比較了這兩種方式的不同之處,最後根據實際移植程序經驗,介紹了將VC++編制的Windows動態 庫移植到Linux下的方法。

2、動態庫技術
2.1 Windows動態庫技術
動態鏈接庫是實現Windows應用程序共享資源、節省內存空間、提高使用效率的一個重要技術手段。常見的動態庫包含外部函數和資源,也有一些動態庫只包 含資源,如Windows字體資源文件,稱之為資源動態鏈接庫。通常動態庫以.dll,.drv、.fon等作為後綴。相應的windows靜態庫通常 以.lib結尾,Windows自己就將一些主要的系統功能以動態庫模塊的形式實現。
Windows動態庫在運行時被系統載入到進程的虛擬空間中,使用從調用進程的虛擬地址空間分配的內存,成為調用進程的一部分。DLL也只能被該進程的線 程所訪問。DLL的句柄可以被調用進程使用;調用進程的句柄可以被DLL使用。DLL模塊中包含各種導出函數,用於向外界提供服務。DLL可以有自己的數 據段,但沒有自己的堆棧,使用與調用它的應用程序相同的堆棧模式;一個DLL在內存中只有一個實例;DLL實現了代碼封裝性;DLL的編制與具體的編程語 言及編譯器無關,可以通過DLL來實現混合語言編程。DLL函數中的代碼所創建的任何對象(包括變數)都歸調用它的線程或進程所有。
根據調用方式的不同,對動態庫的調用可分為靜態調用方式和動態調用方式。
(1)靜態調用,也稱為隱式調用,由編譯系統完成對DLL的載入和應用程序結束時DLL卸載的編碼(Windows系統負責對DLL調用次數的計數),調 用方式簡單,能夠滿足通常的要求。通常採用的調用方式是把產生動態連接庫時產生的.LIB文件加入到應用程序的工程中,想使用DLL中的函數時,只須在源 文件中聲明一下。 LIB文件包含了每一個DLL導出函數的符號名和可選擇的標識號以及DLL文件名,不含有實際的代碼。Lib文件包含的信息進入到生成的應用程序中,被調 用的DLL文件會在應用程序載入時同時載入在到內存中。
(2)動態調用,即顯式調用方式,是由編程者用API函數載入和卸載DLL來達到調用DLL的目的,比較復雜,但能更加有效地使用內存,是編制大型應用程序時的重要方式。在Windows系統中,與動態庫調用有關的函數包括:
①LoadLibrary(或MFC 的AfxLoadLibrary),裝載動態庫。
②GetProcAddress,獲取要引入的函數,將符號名或標識號轉換為DLL內部地址。
③FreeLibrary(或MFC的AfxFreeLibrary),釋放動態鏈接庫。
在windows中創建動態庫也非常方便和簡單。在Visual C++中,可以創建不用MFC而直接用C語言寫的DLL程序,也可以創建基於MFC類庫的DLL程序。每一個DLL必須有一個入口點,在VC++中, DllMain是一個預設的入口函數。DllMain負責初始化(Initialization)和結束(Termination)工作。動態庫輸出函數 也有兩種約定,分別是基於調用約定和名字修飾約定。DLL程序定義的函數分為內部函數和導出函數,動態庫導出的函數供其它程序模塊調用。通常可以有下面幾 種方法導出函數:
①採用模塊定義文件的EXPORT部分指定要輸入的函數或者變數。
②使用MFC提供的修飾符號_declspec(dllexport)。
③以命令行方式,採用/EXPORT命令行輸出有關函數。
在windows動態庫中,有時需要編寫模塊定義文件(.DEF),它是用於描述DLL屬性的模塊語句組成的文本文件。

2.2 Linux共享對象技術
在Linux操作系統中,採用了很多共享對象技術(Shared Object),雖然它和Windows里的動態庫相對應,但它並不稱為動態庫。相應的共享對象文件以.so作為後綴,為了方便,在本文中,對該概念不進 行專門區分。Linux系統的/lib以及標准圖形界面的/usr/X11R6/lib等目錄裡面,就有許多以so結尾的共享對象。同樣,在Linux 下,也有靜態函數庫這種調用方式,相應的後綴以.a結束。Linux採用該共享對象技術以方便程序間共享,節省程序佔有空間,增加程序的可擴展性和靈活 性。Linux還可以通過LD-PRELOAD變數讓開發人員可以使用自己的程序庫中的模塊來替換系統模塊。
同Windows系統一樣,在Linux中創建和使用動態庫是比較容易的事情,在編譯函數庫源程序時加上-shared選項即可,這樣所生成的執行程序就 是動態鏈接庫。通常這樣的程序以so為後綴,在Linux動態庫程序設計過程中,通常流程是編寫用戶的介面文件,通常是.h文件,編寫實際的函數文件, 以.c或.cpp為後綴,再編寫makefile文件。對於較小的動態庫程序可以不用如此,但這樣設計使程序更加合理。
編譯生成動態連接庫後,進而可以在程序中進行調用。在Linux中,可以採用多種調用方式,同Windows的系統目錄(../system32等)一 樣,可以將動態庫文件拷貝到/lib目錄或者在/lib目錄裡面建立符號連接,以便所有用戶使用。下面介紹Linux調用動態庫經常使用的函數,但在使用 動態庫時,源程序必須包含dlfcn.h頭文件,該文件定義調用動態鏈接庫的函數的原型。
(1)_打開動態鏈接庫:dlopen,函數原型void *dlopen (const char *filename, int flag);
dlopen用於打開指定名字(filename)的動態鏈接庫,並返回操作句柄。
(2)取函數執行地址:dlsym,函數原型為: void *dlsym(void *handle, char *symbol);
dlsym根據動態鏈接庫操作句柄(handle)與符號(symbol),返回符號對應的函數的執行代碼地址。
(3)關閉動態鏈接庫:dlclose,函數原型為: int dlclose (void *handle);
dlclose用於關閉指定句柄的動態鏈接庫,只有當此動態鏈接庫的使用計數為0時,才會真正被系統卸載。
(4)動態庫錯誤函數:dlerror,函數原型為: const char *dlerror(void); 當動態鏈接庫操作函數執行失敗時,dlerror可以返回出錯信息,返回值為NULL時表示操作函數執行成功。
在取到函數執行地址後,就可以在動態庫的使用程序裡面根據動態庫提供的函數介面聲明調用動態庫裡面的函數。在編寫調用動態庫的程序的makefile文件時,需要加入編譯選項-rdynamic和-ldl。
除了採用這種方式編寫和調用動態庫之外,Linux操作系統也提供了一種更為方便的動態庫調用方式,也方便了其它程序調用,這種方式與Windows系統 的隱式鏈接類似。其動態庫命名方式為「lib*.so.*」。在這個命名方式中,第一個*表示動態鏈接庫的庫名,第二個*通常表示該動態庫的版本號,也可 以沒有版本號。在這種調用方式中,需要維護動態鏈接庫的配置文件/etc/ld.so.conf來讓動態鏈接庫為系統所使用,通常將動態鏈接庫所在目錄名 追加到動態鏈接庫配置文件中。如具有X window窗口系統發行版該文件中都具有/usr/X11R6/lib,它指向X window窗口系統的動態鏈接庫所在目錄。為了使動態鏈接庫能為系統所共享,還需運行動態鏈接庫的管理命令./sbin/ldconfig。在編譯所引 用的動態庫時,可以在gcc採用–l或-L選項或直接引用所需的動態鏈接庫方式進行編譯。在Linux裡面,可以採用ldd命令來檢查程序依賴共享庫。

3、兩種系統動態庫比較分析
Windows和Linux採用動態鏈接庫技術目的是基本一致的,但由於操作系統的不同,他們在許多方面還是不盡相同,下面從以下幾個方面進行闡述。
(1)動態庫程序編寫,在Windows系統下的執行文件格式是PE格式,動態庫需要一個DllMain函數作為初始化的人口,通常在導出函數的聲明時需 要有_declspec(dllexport)關鍵字。Linux下的gcc編譯的執行文件默認是ELF格式,不需要初始化入口,亦不需要到函數做特別聲 明,編寫比較方便。
(2)動態庫編譯,在windows系統下面,有方便的調試編譯環境,通常不用自己去編寫makefile文件,但在linux下面,需要自己動手去編寫makefile文件,因此,必須掌握一定的makefile編寫技巧,另外,通常Linux編譯規則相對嚴格。
(3)動態庫調用方面,Windows和Linux對其下編制的動態庫都可以採用顯式調用或隱式調用,但具體的調用方式也不盡相同。
(4)動態庫輸出函數查看,在Windows中,有許多工具和軟體可以進行查看DLL中所輸出的函數,例如命令行方式的mpbin以及VC++工具中 的DEPENDS程序。在Linux系統中通常採用nm來查看輸出函數,也可以使用ldd查看程序隱式鏈接的共享對象文件。
(5)對操作系統的依賴,這兩種動態庫運行依賴於各自的操作系統,不能跨平台使用。因此,對於實現相同功能的動態庫,必須為兩種不同的
操作系統提供不同的動態庫版本。

lib和dll文件的區別和聯系 http://hi..com/bigccyy/blog/item/bbf86963d45f43600d33fa08.html
2006-09-23 21:09
lib和dll
lib和dll文件的區別和聯系

.dll是在你的程序運行的時候才連接的文件,因此它是一種比較小的可執行文件格式,.dll還有其他的文件格式如.ocx等,所有的.dll文件都是可執行。

.lib是在你的程序編譯連接的時候就連接的文件,因此你必須告知編譯器連接的lib文件在那裡。一般來說,與動態連接文件相對比,lib文件也被稱為是靜態連接庫。當你把代碼編譯成這幾種格式的文件時,在以後他們就不可能再被更改。如果你想使用lib文件,就必須:
1 包含一個對應的頭文件告知編譯器lib文件裡面的具體內容
2 設置lib文件允許編譯器去查找已經編譯好的二進制代碼

如果你想從你的代碼分離一個dll文件出來代替靜態連接庫,仍然需要一個lib文件。這個lib文件將被連接到程序告訴操作系統在運行的時候你想用到什麼dll文件,一般情況下,lib文件里有相應的dll文件的名字和一個指明dll輸出函數入口的順序表。如果不想用lib文件或者是沒有lib文件,可以用WIN32 API函數LoadLibrary、GetProcAddress。事實上,我們可以在Visual C++ IDE中以二進制形式打開lib文件,大多情況下會看到ASCII碼格式的C++函數或一些重載操作的函數名字。

一般我們最主要的關於lib文件的麻煩就是出現unresolved symble 這類錯誤,這就是lib文件連接錯誤或者沒有包含.c、.cpp文件到工程里,關鍵是如果在C++工程里用了C語言寫的lib文件,就必需要這樣包含:
extern "C"
{
#include "myheader.h"
}
這是因為C語言寫的lib文件沒有C++所必須的名字破壞,C函數不能被重載,因此連接器會出錯。

===============================

在VC中不用MFC如何製作dll

方法一:使用export 和 import

在VC中建立一個Console Application,建立2個文件:Dll.h 和 Dll.cpp

Dll.h

#ifdef MYLIBAPI
#else
#define MYLIBAPI extern "C" _declspec (dllimport)
#end if

MYLIBAPI int Add (int iLeft, int iRight)
MYLIBAPI int Sub (int iLeft, int iRight)

Dll.cpp

#define MYLIBAPI extern "C" _declspec (dllexport)

#include "Dll.h"

int Add (int iLeft, int iRight)
{
return iLeft + iRight ;
}

int Sub (int iLeft, int iRight)
{
return iLeft - iRight ;
}

保存文件。
在Project->setting->link 最下面加上 「/dll」, "/"之前一定要與前一項
有空格。
然後編譯,就可以在debug 或 release下面找到dll 和 lib 文件了
使用的時候包含dll.h文件

方法二:使用def文件
建立一個console application, 建立2個文件dll.h 和 dll.cpp

Dll.h

int Add (int iLeft, int iRight) ;
int Sub (int iLeft, int iRight) ;

Dll.cpp

#include "Dll.h"

int Add (int iLeft, int iRight)
{
return iLeft + iRight ;
}

int Sub (int iLeft, int iRight)
{
return iLeft - iRight ;
}

然後再當前目錄下面建立一個.def文件,文件名最好和要輸出的dll名字一樣,擴展名
為.def, 裡面寫上:

LIBRARY dllname.dll
EXPORTS
Add @1
Add @2
然後將這個文件添加到工程中,
在link中設置 /dll, 然後編譯
在debug或release中就可以找到dll和lib了
使用的時候加上dll.h文件

❺ C++中lib 和 dll 的區別,生成以及使用詳解

首先介紹一下靜態庫(靜態鏈接庫)、動態庫(動態鏈接庫)的概念,首先兩者都是代碼共享的方式。
靜態庫:在鏈接步驟中,連接器將從庫文件取得所需的代碼,復制到生成的可執行文件中,這種庫稱為靜態庫,其特點是可執行文件中包含了庫代碼的一份完整拷貝;缺點就是被多次使用就會有多份冗餘拷貝。即靜態庫中的指令都全部被直接包含在最終生成的 EXE 文件中了。在vs中新建生成靜態庫的工程,編譯生成成功後,只產生一個.lib文件
動態庫:動態鏈接庫是一個包含可由多個程序同時使用的代碼和數據的庫,DLL不是可執行文件。動態鏈接提供了一種方法,使進程可以調用不屬於其可執行代碼的函數。函數的可執行代碼位於一個 DLL 中,該 DLL 包含一個或多個已被編譯、鏈接並與使用它們的進程分開存儲的函數。在vs中新建生成動態庫的工程,編譯成功後,產生一個.lib文件和一個.dll文件
那麼上述靜態庫和動態庫中的lib有什麼區別呢?
靜態庫中的lib:該LIB包含函數代碼本身(即包括函數的索引,也包括實現),在編譯時直接將代碼加入程序當中
動態庫中的lib:該LIB包含了函數所在的DLL文件和文件中函數位置的信息(索引),函數實現代碼由運行時載入在進程空間中的DLL提供
總之,lib是編譯時用到的,dll是運行時用到的。如果要完成源代碼的編譯,只需要lib;如果要使動態鏈接的程序運行起來,只需要dll。

❻ dll庫和lib庫有什麼區別

關於dll庫和lib庫的區別如下:

1、使用場景不同:lib是編譯時用到的,dll是運行時用到的。

如果要談猛完成源代碼的編譯,只需要 lib;如果要使動態鏈接的程序運行起來,只需要dll。

2、用途不同:如果有dll文件,那麼lib一般是一些索引信息,記錄了dll中函數的入口和位 置,dll中是函數的具體內容;如果只有lib文件,那麼這個lib文件是靜態編譯出來的,索引和實現都在其中。

使用靜態編譯的lib文件,在運行程序時 不需要再掛動態庫,缺點是導致應用程序比較大,而且失去了動態庫的靈活性,發布新版本時要發布新的應用程序才可以。

3、應用對象不同:動態鏈接的情況下,有兩個文件:一個是LIB文件,一個是DLL文件。LIB包含被DLL導出的函數名稱和位置,DLL包含實際的函數和數據,應用程序使用LIB文件鏈接到DLL 文件。

在應用程序的可執行文件中,存放的不是被調用的函數代碼,而是DLL中相應函數代碼的地址,從運凳而節省了內存資源。

DLL和LIB文件必須隨應用程序 一起發行,否則應用程序會產生錯誤。如果不想用lib文件或者沒有lib文件,可以用WIN32 API函數LoadLibrary、GetProcAddress裝載。

(6)lib文件是編譯生成的嗎擴展閱讀:

dll庫和lib庫使用方法:

1、使用lib的方法:

靜態lib中,一個lib文件實際上是任意個obj文件的集合,obj文件是cpp文件編譯生成的。在編譯這種靜態庫工程時,不會遇到鏈接錯誤;即使有錯,也只會在使用這個lib的EXT文件或者DLL工程里暴露出來。

在VC中新建一個static library類型的工程Lib,加入test.cpp文件和test.h文件(頭文件內包括函數聲明),然後編譯,就生成了Lib.lib文件。

2、使用dll的方法:

使用動態鏈接中的lib,不是obj文件的集合,即裡面不會有實際的實現,它只是提供動態鏈接到DLL所需要的信息,這種lib可以在旁侍旅編譯一個DLL工程時由編譯器生成。

參考資料來源:網路—lib

參考資料來源:網路—dll

❼ 怎樣編譯生成lib文件啊

需要先製作DLL文件,然後生成對應DLL文件的LIB文件,並編寫由DLL文件中的公開函數的聲明所組成的頭文件。

請參閱有關DLL文件製作的教程

❽ lib文件是什麼

  1. .lib是一種文件名後綴,該文件為Windows操作系統中的庫文件,相當於Linux中的·a或·o、.so文件。

  2. lib文件通過編譯才可以使用,編譯分靜態與動態之分。

    靜態編譯

    靜態lib將導出聲明和實現都放在lib中。編譯後所有代碼都嵌入到宿主程序。

    動態編譯

    動態lib相當於一個h文件,是對實現部分(.dll文件)的導出部分的聲明。編譯後只是將導出聲明部分編譯到宿主程序中,運行時候需要相應的dll文件支持。

❾ lib文件是什麼是不是編譯自動生成我不加lib文件運行不了

楸嘁肷傻哪勘甏肓唇櫻佣緯贍芄輝誦械目芍蔥形募。
#pragma comment(lib, "pcc32_vc6.lib")就是連入一個庫文件,表示鏈接pcc32_vc6.lib這個靜態庫文件來生成可執行文件。追問:
#include包含命令只適用於.h文件,不適用於.lib文件嗎回答:
當然,#include是包含用來頭文件的,相當於把這個頭文件的內容展開到當前的c或cpp源文件中,.h的頭文件和.c或.cpp的源文件都是文本格式的文件,通過編譯鏈接才能得到二進制的可執行文件。而.lib文件是經過了編譯以後的二進制文件,不能通過#include命令來包含。從源代碼文件到可執行文件的這個過程要弄清楚了。

❿ C語言lib

C語言中lib??是個lib的文件夾吧,裡面放了很多庫函數,是方便調用和編寫程序的
#include
好像就是從lib文件夾中優先查找的吧,
如果是VC6.0編寫的話,
C:\Program
Files\Microsoft
Visual
Studio\VC98\LIB
C:\Program
Files\Microsoft
Visual
Studio\VC98\MFC\LIB
默認配置吧,當然也可以自己添加

閱讀全文

與lib文件是編譯生成的嗎相關的資料

熱點內容
大連桶裝水溯源碼售價 瀏覽:300
php怎麼跳轉到電腦 瀏覽:413
如何在電腦上創建新網路連接伺服器 瀏覽:61
c語言編譯之後如何運行 瀏覽:566
mfc多線程編程視頻 瀏覽:410
c編譯的中文怎麼寫 瀏覽:91
單片機連接蜂鳴器電路 瀏覽:844
程序員買房前後對比照 瀏覽:988
cmdjava中文亂碼 瀏覽:947
窗口app哪個好 瀏覽:731
xzforandroid 瀏覽:577
程序員那麼可愛歌曲完整版 瀏覽:906
為什麼購買pdf 瀏覽:45
操作系統代碼編譯 瀏覽:483
程序員東北大學 瀏覽:426
編譯忽略空字元 瀏覽:119
多店鋪阿里雲伺服器教程 瀏覽:379
單片機求初值 瀏覽:421
安卓機如何在電腦備份圖片 瀏覽:927
ca證書加密機價格 瀏覽:799