• 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文件。

  • 相关阅读:
    Lua 随机数生成问题
    关于LUA中的随机数问题
    用setup.py安装第三方包packages
    问题解决 -------- 解决YUM下Loaded plugins: fastestmirror Determining fastest mirrors 的问题
    CentOS6.7上安装Mysql5.7
    Centos6.8通过yum安装mysql5.7
    Gcc ------ gcc的使用简介与命令行参数说明
    redis 常用命令
    redis学习系列
    C# Redis实战
  • 原文地址:https://www.cnblogs.com/robinex/p/7858410.html
Copyright © 2020-2023  润新知