根据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 < )

   {

       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项目时会提示错误信息:

产生这个错误是因为,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视图里,可以看到最新的调试信息:

VisualGDB系列11:Linux C++项目中使用外部Linux库的更多相关文章

  1. WPF Step By Step 系列-Prism框架在项目中使用

    WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...

  2. Spring Data JPA系列3:JPA项目中核心场景与进阶用法介绍

    大家好,又见面了. 到这里呢,已经是本SpringData JPA系列文档的第三篇了,先来回顾下前面两篇: 在第1篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring ...

  3. 在Go语言项目中使用Zap日志库

    在Go语言项目中使用Zap日志库 本文先介绍了Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档. 在Go语言项 ...

  4. win7,vs2010,asp.net项目中修改外部js文件,在调试时加载的还是旧文件

    win7,vs2010,asp.net项目中修改外部js文件,在调试时加载的还是旧文件 我杀过 w3wp.exe和asp.net_state的进程,重启 iis admin的服务,都还是不行. 只是把 ...

  5. 在 Ionic2 TypeScript 项目中导入第三方 JS 库

    原文发表于我的技术博客 本文分享了在Ionic2 TypeScript 项目中导入第三方 JS 库的方法,供参考. 原文发表于我的技术博客 1. Typings 的方式 因在 TypeScript 中 ...

  6. JNI_Android项目中调用.so动态库

    JNI_Android项目中调用.so动态库 2014年6月3日 JNI学习 參考:http://blog.sina.com.cn/s/blog_4298002e01013zk8.html 上一篇笔者 ...

  7. 如何在Ionic2项目中使用第三方JavaScript库

    onic的官网放出一记大招Ionic and Typings,来介绍如何在Ionic2项目中使用第三方JavaScript库. 因为在前阵子正好想用一个非常有名的第三方JS库ChartJs来实现一些东 ...

  8. vue2项目中引用外部js文件

    vue2项目目录如下(utils文件夹是自己手工建的,然后在utils里新建js文件): 使用import导入文件时,注意路径,路径不对会报错: 导入之后使用外部js函数时,直接写导入时的名字加小括号 ...

  9. SWTBOK測试实践系列(5) -- 项目中使用手动和自己主动化的策略

    手动測试和自己主动化測试永远是一个非常热门的话题.自己主动化也一直被人们捧上神坛.自己主动化測试和手动測试从技术上来说本质事实上都是測试用例设计.仅仅只是终于形式一个是人工运行,一个是代码运行罢了.这 ...

随机推荐

  1. Centos6.5安装Mysql5.6.10

    1. 先卸载掉老版本的mysql(linux严格区分大小写,查找的时候加上-i参数,和mysql相关的全部要卸) [root@liuchao ~]# rpm -qa | grep -i mysqlMy ...

  2. HTTP Status 500:报错Unsupported major.minor version 51.0(unable to load class XXX)

    这个是jdk版本和JRE不匹配导致的. 报错信息: 问题详解:(待填) 处理: 1.检查jdk和jre版本是否匹配 ——打开命令行界面(cmd),分别输入java -version 和javac -v ...

  3. JBOSS invoker GETSHELL(PHP版)

    <?php $target = @$argv[1]; $procotol = @$argv[2]; if ($argc < 2) { print "[-]:php Jboss.p ...

  4. 由于ptrace.h文件导致的内核编译出错的解决方法

    arch/x86/kernel/ptrace.c:1472:17: error: conflicting types for 'syscall_trace_enter'  In file includ ...

  5. Codeforces Round #370 (Div. 2) A , B , C 水,水,贪心

    A. Memory and Crow time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. Hibernate中使用Spring Data JPA

    一.配置文件的方式 1.pom.xml中引入相关依赖 <properties> <project.build.sourceEncoding>UTF-8</project. ...

  7. jspxcms笔记三

    首页 index.html site :站点对象栏目 cover.html list.html node :栏目对象, text :正文详细 info.html node :栏目对象, info :文 ...

  8. 自己编写each函数

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. SSIS的控制流之For循环容器

    SSIS包由一个控制流以及一个或多个数据流(可选)组成.下面的关系图显示具有一个容器和六项任务的控制流. 这些任务中有五项定义于包级别,还有一项定义于容器级别.任务位于容器内.在控制流中的工具箱.我们 ...

  10. GridView1 footer求和

    // ShowFooter="True" private double sum = 0;//取指定列的数据和,你要根据具体情况对待可能你要处理的是int protected voi ...