VisualGDB系列11:Linux C++项目中使用外部Linux库

时间:2023-03-09 10:05:39
VisualGDB系列11:Linux C++项目中使用外部Linux库

  根据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”按钮:

VisualGDB系列11:Linux C++项目中使用外部Linux库

2 选择项目类型

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

3 选择远程Linux机器

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

4 安装libmagick库

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

sudo apt-get install libmagick++-dev

VisualGDB系列11:Linux C++项目中使用外部Linux库

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

5 设置源码访问方式

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

6 创建共享文件夹

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

7 选择登录点(mount point)

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

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

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

9 完成项目创建

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

10 创建一张图片

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

11 添加远程ImageMagick库

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

点击”Add Remote”:

VisualGDB系列11:Linux C++项目中使用外部Linux库

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

12 修改main源码

修改main源码的内容如下:

#include<Magick++.h>

#include<stdio.h>

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

{

    if (argc < )

   {

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

        return ;

   }

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

   Magick::Image img(argv[]);

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

   img.rotate();

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

   img.write(argv[]);

    return ;

}

13 处理build错误

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

14 修改链接错误

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

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

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

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

16 运行并观察结果

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

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

VisualGDB系列11:Linux C++项目中使用外部Linux库

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

VisualGDB系列11:Linux C++项目中使用外部Linux库