<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 概念 我們開發時候經常有一些公共代碼是需要反復使用,就把這些代碼編譯為庫文件 庫可以簡單看成一組目標文件的集合,將這些目標文件經過壓縮打包之后形成的一個文件.像在windows這樣的平臺上,最常用的c語言庫是由集成按開發環境所附帶的運行庫,這些庫一般由編譯廠商提供 # windows下靜態庫創建和使用 ## 創建 1. 創建一個新項目,在已安裝的模板中選擇"常規",在右邊的類型下選擇"空項目",在名稱和解決方案名稱中輸入staticlib.點擊確定 2. 在解決方案資源管理器的頭文件中添加mylib.h文件,在源文件添加mylib.c文件(即實現文件) ![](https://box.kancloud.cn/6e96a33dc9f35707ec597733977ae41d_372x302.png) 3. 在mylib.h文件中添加如下代碼 ~~~ #pragma once #ifdef __cplusplus extern "C" { #endif int myAdd(int a, int b); #ifdef __cplusplus } #endif ~~~ 4. 在mylib.c文件中添加如下代碼 ~~~ #include "mylib.h" int myAdd(int a, int b) { return a + b; } ~~~ 5. 配置項目屬性.因為這是一個靜態鏈接庫,所以應在項目屬性的"配置屬性"下選擇"常規",在其下的配置類型中選擇靜態庫(.lib) ![](https://box.kancloud.cn/97fe73ee959fa40b3b7ee9631d9a0eaa_1582x908.png) 6. 編譯生成新的解決方案,在Debug文件夾下會得到mylib.lib(對象文件庫),將該.lib文件和相應頭文件.h給用戶,用戶就可以使用該庫里的函數了 ![](https://box.kancloud.cn/424e4f78c1b26acdc190783bf31f347e_600x230.png) 文件在這里 ![](https://box.kancloud.cn/08f839b5c8eb68b20f23b3fc45460b46_1084x296.png) ## 使用 方法一: 配置項目屬性 A. 添加工程的頭文件目錄:工程-屬性-配置屬性-c/c++--常規--附加包含目錄:加上頭文件存放目錄 B: 添加文件引用的lib靜態庫路徑:工程--屬性--配置屬性--鏈接器--常規--附加庫目錄:加上lib文件存放目錄 C: 然后添加工程引用的lib文件名:工程--屬性--配置屬性--鏈接器--輸入--附加依賴項:加上lib文件名 方法二: 使用編譯語句 ~~~ #pragma comment(lib, "./mylib.lib") ~~~ 方法三: 添加工程 就像你添加.h和.c文件一樣,把lib文件添加到工程文件列表中去. 切換到"解決方法視圖"-->選中要添加lib的工程-->點擊右鍵-->添加-->現有項-->選擇lib文件-->確定 測試下 ~~~ #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> #include"mylib.h" int main() { int a = 10; int b = 20; int ret = myAdd(a, b); printf("%d\n", ret); system("pause"); return EXIT_SUCCESS; } ~~~ ## 優缺點 * 靜態庫對函數庫的鏈接是放在編譯時期完成的,靜態庫在程序的鏈接階段被復制到了程序中,和程序運行時沒有關系 * 程序在運行時與函數庫再無瓜葛,移植方便 * 浪費空間和資源,所有相關的目標文件與牽扯到的函數庫被鏈接合成一個可執行文件 空間浪費是一個問題,另一個問題是靜態鏈接對程序的更新,部署和發布也會帶來很多麻煩.比如程序中使用的mylib.lib是由一個第三方廠商提供的,當該廠商更新容量mylib.lib的時候,那么我們的程序就要拿到最新版的mylib.lib,然后將其重新編譯進我們的代碼 # windows下動態庫創建和使用 等程序運行的時候才鏈接,把鏈接過程推遲到了運行時再進行 ## 創建 1. 創建一個新項目,在已安裝的模板中選擇"常規",在右邊的類型下選擇"空項目",在名稱和解決方案名稱中輸入mydll點擊確定 2. 在解決方案資源管理器的頭文件中添加mydll.h,在源文件添加mydll.c文件(即實現文件) 3. 在mydll.h文件中添加如下代碼 ~~~ #pragma once #ifdef __cplusplus extern "C"{ #endif // __cplusplus //內部函數,外部函數 //外部函數.要聲明,不聲明只能內部使用 __declspec(dllexport) int myAdd(int a, int b); #ifdef __cplusplus } #endif // __cplusplus ~~~ 4. 在mydll.c文件中添加如下代碼 ~~~ #include"mydll.h" int myAdd(int a, int b) { return a + b - 10; } ~~~ ![](https://box.kancloud.cn/4d0769363f5dffc678bf603905f0196c_1196x652.png) ![](https://box.kancloud.cn/027692b4644c82c292a31e44f2ecc0e4_678x380.png) **他會生成個lib文件,這個lib文件和靜態庫不同的地方在于,靜態庫的lib是實現,動態庫是那些實現是導出的 dll是真正代碼實現** 把lib,dll,.h文件拷貝出來 ## 使用 方法一: 隱式調用 創建主程序TestDll,將mydll.h, mydll.dll和mydll.lib復制到源代碼目錄下.(ps: 頭文件Func.h不是必須的,只是c++中使用外部函數時,需要先進行聲明)在程序中指定鏈接引用鏈接庫 ~~~ #pragma comment(lib, "./mydll.lib") ~~~ 方法二: 顯示調用 ~~~ HANDLE hDll; //聲明一個dll實例文件句柄 hDll = LoadLibrarv("mvdll.dll"); //導入動態鏈接庫 MYFUNC minus_test; //創建函數指針 //獲取導入函數的函數指針 minus_test = (MYFUNC)GetProcAddress(hDll, "myminus"); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看