VisualGDB系列7:使用VS創建Linux靜態庫和動態庫


  根據VisualGDB官網(https://visualgdb.com)的幫助文檔大致翻譯而成。主要是作為個人學習記錄。有錯誤的地方,Robin歡迎大家指正。

 

 

         本文介紹如何在VS中創建靜態庫和動態庫,並用VisualGDB來調試它們。

         首先我們用VisualGDB創建一個簡單的Linux應用程序,然后添加一個靜態庫和一個動態庫,並在調試器中測試它們。

為了嘗試本文中的步驟,你需要一台Windows機器和一台Linux機器:

  • 兩個物理電腦;
  • 一個Windows電腦及運行在其上的Linux虛擬機(使用VIRTUALBOX/VMWARE);
  • 一個Linux電腦及運行在其上的Windows虛擬機(使用VIRTUALBOX/VMWARE)。

 

  在你的Windows電腦上安裝好VisualGDB后,就可以開始下面的步驟了。

 

1 添加Linux主應用程序

         根據《使用VS來開發Linux程序》,在VS中創建一個簡單的Linxu app。該項目的名稱為LinuxApp,構建這個app確保能夠調試它。

                       

 

2 創建靜態庫

2.1 開始創建項目

         在VS的Solution Explorer中,在solution項上右鍵,選擇”Add->New Project”:

 

 

2.2 啟動項目創建向導

         現在開始創建靜態庫。保證已經選擇VisualGDB向導,並將該靜態庫項目的名稱命名為MyStaticLib,然后點擊”OK”:

 

 

2.3 選擇項目類型為靜態庫

         選擇”Create a new project”->”Static library”->”Use MSBuild”,並點擊”Next”:

 

 

2.4 選擇Linux電腦

         在下一頁選擇遠程Linux機器。保證和之前的應用程序在同一個機器上。

 

 

2.5 源碼訪問設置

         采用默認方式配置源碼訪問方式,然后點擊”Finish”:

 

 

2.6 修改主應用程序的代碼

         現在已經創建了一個新的靜態庫項目。接下來修改主應用程序的main源文件如下:

#include <iostream>

#include "MyStaticLib/MyStaticLib.h"

 

using namespace std;

 

int main(int argc, char *argv[])

{

    char sz[] = "Hello, World!";    //Hover mouse over "sz" while debugging to see its contents

    cout << sz << MyStaticLibTest() << endl;    //<================= Put a breakpoint here

    return 0;

}

 

2.7 從主程序項目中引用庫項目

         在編譯之前,需要從主程序項目中添加一個引用到庫項目:

 

 

2.8 在Add Reference窗口中勾選添加的庫

         在Add Reference窗口中,勾選MyStaticLib:

 

 

2.9 構建solution

         構建solution:

 

 

2.10 斷點調試靜態庫

         在靜態庫的MyStaticLibTest()中加上斷點。開始調試后會進入這個斷點中。在call back窗口中,可以看到這個靜態庫函數被main()函數調用了:

 

 

3 添加動態庫

3.1 添加動態庫項目

         在solution中添加一個新的動態庫。該動態庫的名稱為MyDynamicLib,並在Project Type頁面選擇”Shared Library”。其他步驟和第2節中添加靜態庫的步驟一樣。

 

3.2 從主程序項目中引用動態庫

         動態庫項目創建成功后,從主應用程序中引用這個動態庫:

 

 

3.3 修改主程序源碼來調用動態庫函數

         修改主程序的main源文件,在該文件中調用動態庫函數MyDynamicLibTest():

#include <iostream>

#include "MyStaticLib/MyStaticLib.h"

#include "MyDynamicLib/MyDynamicLib.h"

 

using namespace std;

 

int main(int argc, char *argv[])

{

    char sz[] = "Hello, World!"; //Hover mouse over "sz" while debugging to see its contents

    cout << sz << MyStaticLibTest() << MyDynamicLibTest() << endl; // Put a breakpoint here

    return 0;

}

 

 

 

3.4 斷點調試動態庫

         構建solution后。在MyDynamicLibTest()函數中放置斷點並啟動調試。進入該斷點后,在VS的Module窗口中可以觀察到加載的這個動態庫,以及加載的其他動態庫:

 

 

4 導出配置

         配置基於VisualGDB的庫后,可以“導出”一些build settings,然后這些settings就自動添加到所有引用該庫的項目中。

         比如,在MyDynamicLib Property頁面下,”Exported Settings”->”Preprocessor Definitions”,鍵入:USING_MY_DYNAMIC_LIB

 

         然后在主應用程序中檢驗這個新添加的宏,確保能夠構建:

 

 

5 配置VisualGDB相關的settings

         通過右鍵->VisualGDB Project Properties,可以為每個項目配置各種VisualGDB相關的settings:

 

         如果你更喜歡這樣的開發環境:多個庫項目共享相同的通用settings(比如,deployment paths),你可以嘗試創建基於CMake的項目(參考:使用VS創建CMake Linux項目)。VisualGDB透明地將CMake集成到VS中,當Solution Explorer中有變化時,會自動編輯CMakeLists.txt文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM