當前位置:首頁 » 存儲配置 » vs如何配置lib庫

vs如何配置lib庫

發布時間: 2024-01-04 19:07:07

『壹』 C語言vs怎麼使用自己做的靜態庫與動態庫,本人小白,請求詳解

1.靜態鏈接庫

打開VS2010,新建一個項目,選擇win32項目,點擊確定,選擇靜態庫這個選項,預編譯頭文件可選可不選。

在這個空項目中,添加一個.h文件和一個.cpp文件。名字我們起為static.h和static.cpp

static.h文件:

[cpp]view plain

  • #ifndefLIB_H

  • #defineLIB_H

  • extern"C"intsum(inta,intb);

  • #endif


  • static.cpp文件:
  • [cpp]view plain

  • #include"static.h"

  • intsum(inta,intb)

  • {

  • returna+b;

  • }

  • 編譯這個項目之後,會在debug文件夾下生成static.lib文件,這個就是我們需要的靜態鏈接庫。
  • 下面說明如何調用靜態鏈接庫。

    首先需要新建一個空項目,起名為test。將之前static項目下的static.h和static.lib這個2個文件復制到test項目的目錄下,並在工程中加入static.h文件。

    新建一個test.cpp文件如下:

    [cpp]view plain

  • #include<stdio.h>

  • #include<stdlib.h>

  • #include"static.h"

  • #pragmacomment(lib,"static.lib")

  • intmain()

  • {

  • printf("%d ",sum(1,2));

  • system("pause");

  • return0;

  • }

  • 編譯運行可得結果:3
  • #pragma comment(lib,"static.lib"),這一句是顯式的導入靜態鏈接庫。除此之外,還有其他的方法,比如通過設置路徑等等,這里不做介紹。

    2.動態鏈接庫

    和創建靜態鏈接庫一樣,需要創建一個空的win32項目,選擇dll選項。創建dynamic.cpp和dynamic.h文件

    dynamic.h文件:

    [cpp]view plain

  • #ifndefDYNAMIC

  • #defineDYNAMIC

  • extern"C"__declspec(dllexport)intsum(inta,intb);

  • #endifDYNAMIC


  • dynamic.cpp文件:

    [cpp]view plain

  • #include"dynamic.h"

  • intsum(inta,intb)

  • {

  • returna+b;

  • }

  • 編譯這個項目,會在debug文件夾下生成dynamic.dll文件。

  • 下面介紹如何調用動態鏈接庫,這里講的是顯式的調用。

    在剛才的test項目下,把static.lib和static.h文件刪除,把dynamic.h和dynamic.dll復制到該目錄下,並在項目中添加dynamic.h文件,修改test.cpp文件為:

    [cpp]view plain

  • #include<stdio.h>

  • #include<stdlib.h>

  • #include<Windows.h>

  • #include"dynamic.h"

  • intmain()

  • {

  • HINSTANCEhDll=NULL;

  • typedefint(*PSUM)(inta,intb);

  • PSUMpSum;

  • hDll=LoadLibrary(L"dynamic.dll");

  • pSum=(PSUM)GetProcAddress(hDll,"sum");

  • printf("%d ",pSum(1,2));

  • system("pause");

  • FreeLibrary(hDll);

  • return0;

  • }


  • 編譯運行結果為:3
  • 特別提示:

    1.extern "C"中的C是大寫,不是小寫

    2.如果從VS2010中直接運行程序,lib和dll需要放到test項目的目錄下;如果想雙擊項目test下的debug文件中的exe文件直接運行的話,需把lib和dll放入debug文件夾下。

『貳』 如何在編譯器里設置調用別人寫好的lib和dll步驟

如何在編譯器(vs2008)里設置調用別人寫好的lib和dll如何在編譯器(vs2008)里設置調用別人寫好的lib和dll步驟:1.Tools->options->projectsandsolutions->VC++directories分別在包含文件,庫文件填加了路徑(這些路徑只告訴編譯器怎麼找文件,沒有說把那裡面的文件加入工程.)(若不設置,編譯報錯:無法打開***文件)2.Project->properties->c/c++->general->additionalincludedirectories添加包含文件Project->properties->linker->general->additionallibrarydirectories添加庫文件Project->properties->linker->input->添加用到的lib(這一步也可以在代碼中顯示調用#pragmacomment(lib,"***.lib"))(若不添加,連接報錯:無法解析的外部符號)3.將dll文件拷貝到工程debug文件下(如果不拷貝,編譯鏈接不報錯,運行報錯:無法找到***.dll)切記第三條,讓老子排查了一上午,當然最好把所有輸出目錄定位到一個文件下面。附:DLL與LIB文件的區別共有兩種庫:一種是LIB包含了函數所在的DLL文件和文件中函數位置的信息(入口),代碼由運行時載入在進程空間中的DLL提供,稱為動態鏈接庫dynamiclinklibrary。一種是LIB包含函數代碼本身,在編譯時直接將代碼加入程序當中,稱為靜態鏈接庫staticlinklibrary。共有兩種鏈接方式:動態鏈接使用動態鏈接庫,允許可執行模塊(.dll文件或.exe文件)僅包含在運行時定位DLL函數的可執行代碼所需的信息。靜態鏈接使用靜態鏈接庫,鏈接器從靜態鏈接庫LIB獲取所有被引用函數,並將庫同代碼一起放到可執行文件中。關於lib和dll的區別如下:(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文件,可以用WIN32API函數LoadLibrary、GetProcAddress裝載。使用lib需注意兩個文件:(1).h頭文件,包含lib中說明輸出的類或符號原型或數據結構。應用程序調用lib時,需要將該文件包含入應用程序的源文件中。(2).LIB文件,略。使用dll需注意三個文件:(1).h頭文件,包含dll中說明輸出的類或符號原型或數據結構的.h文件。應用程序調用dll時,需要將該文件包含入應用程序的源文件中。(2).LIB文件,是dll在編譯、鏈接成功之後生成的文件,作用是當其他應用程序調用dll時,需要將該文件引入應用程序,否則產生錯誤。如果不想用lib文件或者沒有lib文件,可以用WIN32API函數LoadLibrary、GetProcAddress裝載。(3).dll文件,真正的可執行文件,開發成功後的應用程序在發布時,只需要有.exe文件和.dll文件,並不需要.lib文件和.h頭文件

『叄』 編譯錯誤,如何解決error LNK2001: unresolved external symbol

導致「error LNK2001: unresolved external symbol」的原因為getStats此方法的鏈接庫沒有找到。很可能是工程中引用了第三方開源庫或者自己編譯生成的庫,且只用了頭文件,而沒有將對應的lib文件路徑加入到工程中。

具體解決方法為(此方法針對vs系列集成開發環境):

1.如果還未引入頭文件,那麼可以右鍵點擊項目,然後點擊「屬性」。

熱點內容
zenly為什麼不能下載安卓機 發布:2024-11-28 18:59:05 瀏覽:295
怎麼把輔助放入伺服器 發布:2024-11-28 18:53:06 瀏覽:598
渲染器伺服器ip一定嗎 發布:2024-11-28 18:44:38 瀏覽:648
光遇的伺服器老是爆滿怎麼辦 發布:2024-11-28 18:41:10 瀏覽:714
sql最大日期的記錄 發布:2024-11-28 18:35:35 瀏覽:716
數據伺服器和電腦如何連接 發布:2024-11-28 18:06:49 瀏覽:745
怎麼讓編譯器輸出的字元相隔單位 發布:2024-11-28 18:04:25 瀏覽:524
w7電腦如何顯示配置 發布:2024-11-28 18:01:35 瀏覽:116
智通編譯股票股東 發布:2024-11-28 17:51:56 瀏覽:731
恥辱2低配置怎麼設置 發布:2024-11-28 17:51:50 瀏覽:92