首页 > 技术文章 > VisualGDB系列11:Linux C++项目中使用外部Linux库

robinex 2017-11-23 23:56 原文

  根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成。主要是作为个人学习记录。有错误的地方,Robin欢迎大家指正。

 

         在《使用VS创建Linux静态库和动态库》文档中,我们介绍了如何在VisualGDB创建的应用程序中如何使用VisualGDB创建的库(静态库/动态库)。本文介绍在VisualGDB项目中使用外部的Linux库(非VisualGDB创建的)。我们创建一个Linux项目,该项目使用Magick++库来翻转图片。

 

1 启动Linux项目向导

         启动VS,选择”File”->”New”->”Project”,然后选择”VisualGDB”->”Linux Project Wizard”。设定项目名称和位置后,点击”OK”按钮:

                       

 

2 选择项目类型

         在下一页,项目类型选择”Application”,然后点击”Next”:

 

 

3 选择远程Linux机器

         在下一页选择你想使用的Linux机器。我们需要在Linux机器上安装Magick++库,所以在”Remote computer”的右侧点击console按钮来打开一个新的SSH console:

 

 

4 安装libmagick库

         安装libmagick++-dev包。如果你的Linux系统是基于Debian的,在console窗口中运行如下命令:

sudo apt-get install libmagick++-dev

 

         当安装完成后,回答VisualGDB向导并点击”Next”。

 

5 设置源码访问方式

         为了使Linux机器轻松访问Windows项目文件夹中的文件,我们将使用共享文件夹方式,选择”Mount a shared Windows folder”并点击”setup”:

 

 

6 创建共享文件夹

         VisualGDB会建议共享包含项目文件夹的其中一个文件夹。本例中,项目位于目录” c:\projects\RotateDemo”下,我们将共享目录” c:\projects”。为了让Linux电脑访问你的共享文件夹,你需要提供有效的凭证:

 

 

7 选择登录点(mount point)

         点击”OK”后,VisualGDB会让你选择mount point,用于映像你的文件夹。本例中,我们使用” /opt/VisualGDB-projects”:

 

 

8 检查Windows和Linux之间的通信路径状态

         文件夹被共享及登录后,在向导页面的底部有个图表,用来检测Linux和Windows之间的通信路径状态:

 

 

9 完成项目创建

         点击”Finish”后,VisualGDB就创建了一个”Hello,World”项目,点击”Ctrl-Shift-B”来build:

 

 

10 创建一张图片

         配置好共享文件夹后,Linux电脑就能够自动访问Windows项目目录下的文件,也能在该目录下写文件。在项目目录下创建一个名叫ArrowRight.png的文件,并在上面画一个箭头:

 

 

11 添加远程ImageMagick库

         现在需要配置IntelliSense来支持ImageMagick头文件。在项目上右键,选择”VisualGDB Project Properties”,进入IntelliSense页面:

 

         点击”Add Remote”:

 

         点击浏览按钮并选择” /usr/include/ImageMagick”:

 

         点击”OK”会保存所有的设置。VisualGDB会将目录添加到IntelliSense搜索路径下。如果你近期也安装了其他的库,点击”Edit Remote Cache”,选择所有的目录并点击”Reload”:

 

 

12 修改main源码

         修改main源码的内容如下:

#include<Magick++.h>

#include<stdio.h>

 

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

{

    if (argc < 3)

   {

       printf("Usage: %s <Input file> <Output file>", argv[0]);

        return 1;

   }

 

   printf("Opening...\n");

   Magick::Image img(argv[1]);

 

   printf("Rotating...\n");

   img.rotate(45);

 

   printf("Saving...\n");

   img.write(argv[2]);

 

    return 0;

}

 

13 处理build错误

         Build项目时会提示错误信息:

 

         产生这个错误是因为,GCC include目录和IntelliSense include目录是分开管理的。要解决这个问题,需要打开文件flags.mak并在INCLUDE_DIRS 声明中添加/usr/include/ImageMagick。现在build会成功但会提示链接错误:

 

 

14 修改链接错误

         要修改链接(linker)错误,需要将Magick++库添加到LIBRARY_NAMES中:

 

         注意一下,真实的库名字为libMagick++.a,该库位置为标准库的其中一个目录。在flags.mak文件中删除lib前缀,就像GCC按约定需要的一样。

 

15 提供命令行参数来运行程序

         运行前我们需要提供命令行参数。最快捷的方式是使用VisualGDB工具栏。在工具栏区域右键使能工具栏并选择VisualGDB。然后在文本区域输入” ArrowRight.png ArrowRotated.png”:

 

 

16 运行并观察结果

         按F5运行程序,或者按F10单步进入:

 

         打开项目文件夹查看程序创建的ArrowRotated.png文件:

 

         在VS输出面板的VisualGDB Program Output视图里,可以看到最新的调试信息:

 

推荐阅读