創建和使用靜態庫 (C++)

我們將創建的下一個庫類型是靜態庫 (LIB)。使用靜態庫是重用代碼的一種絕佳方式。您不必在自己創建的每個程序中重新實現同一例程,而只需對這些例程編寫一次,然後從需要該功能的應用程序引用它們即可。

本演練涵蓋以下內容:

  • 創建新的靜態庫項目。

  • 向靜態庫添加類。

  • 創建引用靜態庫的應用程序。

  • 在控制檯應用程序中使用靜態庫的功能。

  • 運行應用程序。

本主題假定您具備 C++ 語言的基礎知識。

創建新的靜態庫項目

  1. “文件”菜單中,選擇“新建”,然後選擇“項目…”

  2. “項目類型”窗格中,選擇“Visual C++”下的“Win32”

  3. “模板”窗格中,選擇“Win32 控制檯應用程序”

  4. 爲項目選擇一個名稱,如“MathFuncsLib”,並將其輸入“名稱”字段。爲解決方案選擇一個名稱,如“StaticLibrary”,並將其輸入“解決方案名稱”字段。

  5. “確定”啓動“Win32 應用程序嚮導”。在“Win32 應用程序嚮導”對話框的“概述”頁中,按“下一步”

  6. “Win32 應用程序嚮導”“應用程序設置”頁中,選擇“應用程序類型”下的“靜態庫”

  7. “Win32 應用程序嚮導”“應用程序設置”頁中,清除“附加選項”下的“預編譯頭”複選框。

  8. “完成”創建項目。

向靜態庫添加類

  1. 若要爲新類創建頭文件,請從“項目”菜單中選擇“添加新項…”。將顯示“添加新項”對話框。從“類別”窗格中,選擇“Visual C++”下的“代碼”。從“模板”窗格中選擇“頭文件(.h)”。爲頭文件選擇一個名稱,如“MathFuncsLib.h”,並按“添加”。將顯示一個空白文件。

  2. 添加一個名爲“MyMathFuncs”的簡單類,以執行常見的算術運算,如加、減、乘和除。代碼應與以下內容類似:

    // MathFuncsLib.h
    
    namespace MathFuncs
    {
        class MyMathFuncs
        {
        public:
            // Returns a + b
            static double Add(double a, double b);
    
            // Returns a - b
            static double Subtract(double a, double b);
    
            // Returns a * b
            static double Multiply(double a, double b);
    
            // Returns a / b
            // Throws DivideByZeroException if b is 0
            static double Divide(double a, double b);
        };
    }
    
  3. 若要爲新類創建源文件,請從“項目”菜單中選擇“添加新項…”。將顯示“添加新項”對話框。從“類別”窗格中,選擇“Visual C++”下的“代碼”。從“模板”窗格中,選擇“C++ 文件(.cpp)”。爲源文件選擇一個名稱,如“MathFuncsLib.cpp”,並按“添加”。將顯示一個空白文件。

  4. 在源文件中實現“MyMathFuncs”的功能。代碼應與以下內容類似:

    // MathFuncsLib.cpp
    // compile with: /c /EHsc
    // post-build command: lib MathFuncsLib.obj
    
    #include "MathFuncsLib.h"
    
    #include <stdexcept>
    
    using namespace std;
    
    namespace MathFuncs
    {
        double MyMathFuncs::Add(double a, double b)
        {
            return a + b;
        }
    
        double MyMathFuncs::Subtract(double a, double b)
        {
            return a - b;
        }
    
        double MyMathFuncs::Multiply(double a, double b)
        {
            return a * b;
        }
    
        double MyMathFuncs::Divide(double a, double b)
        {
            if (b == 0)
            {
                throw new invalid_argument("b cannot be zero!");
            }
    
            return a / b;
        }
    }
    
  5. 若要將項目生成爲靜態庫,請從“項目”菜單中選擇“MathFuncsLib屬性…”。在左窗格中,選擇“配置屬性”下的“常規”。在右窗格中,將“配置類型”更改爲“靜態庫(.lib)”。按“確定”保存更改。

    說明:

    如果是從命令行生成,必須分兩個步驟來生成程序。首先,通過使用帶編譯器選項 /c 的 Cl.exe 編譯代碼 (cl /c /EHsc MathFuncsLib.cpp)。這將創建名爲“MathFuncsLib.obj”的對象文件。有關更多信息,請參見 /c(編譯但不鏈接)。接着,使用庫管理器 Lib.exe 鏈接代碼 (lib MathFuncsLib.obj)。這將創建靜態庫“MathFuncsLib.lib”。有關庫管理器的更多信息,請參見LIB 引用

  6. 編譯該靜態庫,方法是選擇“生成”菜單中的“生成解決方案”。這將創建一個可供其他程序使用的靜態庫。

創建引用靜態庫的應用程序

  1. 若要創建引用並使用剛剛創建的靜態庫的應用程序,請從“文件”菜單中選擇“新建”,然後選擇“項目…”

  2. “項目類型”窗格中,選擇“Visual C++”下的“Win32”

  3. “模板”窗格中,選擇“Win32 控制檯應用程序”

  4. 爲項目選擇一個名稱(如“MyExecRefsLib”),並將其鍵入“名稱”字段。從“解決方案”旁邊的下拉列表中選擇“添入解決方案”。這會將新項目添加到該靜態庫所屬的同一個解決方案中。

  5. “確定”啓動“Win32 應用程序嚮導”。在“Win32 應用程序嚮導”對話框的“概述”頁中,按“下一步”

  6. “Win32 應用程序嚮導”“應用程序設置”頁中,選擇“應用程序類型”下的“控制檯應用程序”

  7. “Win32 應用程序嚮導”“應用程序設置”頁中,清除“附加選項”下的“預編譯頭”

  8. “完成”創建項目。

在控制檯應用程序中使用靜態庫的功能

  1. 創建新的控制檯應用程序後,該向導將爲您創建一個空程序。源文件的名稱與您在前面爲項目選擇的名稱相同。在本示例中,名爲“MyExecRefsLib.cpp”

  2. 若要使用在靜態庫中創建的算術例程,必須引用該靜態庫。爲此,請選擇“項目”菜單中的“引用…”。在“屬性頁”對話框中,展開“通用屬性”節點,並選擇“引用”。然後選擇“添加新引用…”按鈕。有關“引用...”對話框的更多信息,請參見“<Projectname> 屬性頁”對話框 ->“通用屬性”->“框架和引用”

  3. 顯示“添加引用”對話框。此對話框列出了所有可以引用的庫。“項目”選項卡列出了當前解決方案中的所有項目,以及它們包含的所有庫。在“項目”選項卡中,選擇“MathFuncsLib”。然後選擇“確定”。有關“添加引用”對話框的更多信息,請參見“添加引用”對話框

  4. 若要引用靜態庫的頭文件,必須修改包含目錄路徑。爲此,請在“屬性頁”對話框中,展開“配置屬性”節點,然後展開“C/C++”節點,並選擇“常規”。在“附加包含目錄”旁邊,鍵入“MathFuncsLib.h”頭文件所在位置的路徑。

  5. 現在,可以在應用程序中使用“MyMathFuncs”類了。使用以下代碼替換“MyExecRefsLib.cpp”的內容:

    // MyExecRefsLib.cpp
    // compile with: /EHsc /link MathFuncsLib.lib
    
    #include <iostream>
    
    #include "MathFuncsLib.h"
    
    using namespace std;
    
    int main()
    {
        double a = 7.4;
        int b = 99;
    
        cout << "a + b = " <<
            MathFuncs::MyMathFuncs::Add(a, b) << endl;
        cout << "a - b = " <<
            MathFuncs::MyMathFuncs::Subtract(a, b) << endl;
        cout << "a * b = " <<
            MathFuncs::MyMathFuncs::Multiply(a, b) << endl;
        cout << "a / b = " <<
            MathFuncs::MyMathFuncs::Divide(a, b) << endl;
    
        return 0;
    }
    
  6. 通過從“生成”菜單中選擇“生成解決方案”,生成可執行文件。

運行應用程序

  1. 確保選擇“MyExecRefsLib”作爲默認項目。在“解決方案資源管理器”中,選擇“MyExecRefsLib”,然後選擇“項目”菜單中的“設爲啓動項目”

  2. 若要運行項目,請選擇“調試”菜單中的“開始執行(不調試)”。輸出應該與下面的內容類似:

    a + b = 106.4
    a - b = -91.6
    a * b = 732.6
    a / b = 0.0747475
發佈了3 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章