用VS2013+VELT-0.1.3进行Linux开发:Hello World

快乐虾

http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651)

欢迎转载,但请保留作者信息

本文仅适用于vs2013 + velt-0.1.3


1.1    什么是VELT


VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发。利用这个插件,将可以在visual studioIDE中进行Linux应用程序的开发(包括编译和调试),也可以进行ubootlinux内核的编译,并根据编译时的错误信息正确定位到源码。目前的版本是0.1.3,仅支持vs2013,是一个刚刚启动开发不久的插件。可以在CSDN下载频道下载(http://download.csdn.net/detail/lights_joy/8396189),安装过程参见《VS2013+VELT-0.1.3进行Linux开发:环境搭建》。下面是它的基本功能:

  1. 支持x86 Linuxhi3516hi3520MinGW这几个平台。

  2. 完成UBOOT的编译,并根据编译的错误信息自动定位到相应的文件位置。

  3. 完成LINUX内核的编译,并根据编译的错误信息自动定位到相应的文件位置。

  4. 完成Linux内核的配置。

  5. 不使用Makefile进行Linux应用程序的编译。

  6. 使用Makefile进行Linux应用程序的开发。

  7. 使用SSH连接目标机器并用gdb进行应用程序的调试。

  8. 使用Telnet连接目标机器并用gdb进行应用程序的调试。



本文将说明如何用VELT创建一个Hello WorldLinux应用程序并进行调试。


1.2    工程创建


和普通WIN32程序一样,我们新建一个项目:

技术分享


这里需要注意的是项目的存放位置,这个目录必须可以在windows下访问,也可以在Linux访问。如我的测试工程放在f:\projects\tmp,对应的Linux访问路径为:

/mnt/hgfs/projects/tmp 


1.3    IntelliSense


在项目创建完成后,可以发现项目中只有一个main.c文件。但此时VS由于找不到包含文件的路径,也无法正确分析代码,显示出来就是这样的:

技术分享


我们需要让vsintellisense能够访问正确的头文件,将Linux系统下的/usr/include目录复制一份到windows,如F:\local_cache\linux\usr\include,这个目录只需要给VS访问,因此没有共享的要求,任何目录都可以!

接着我们需要告诉VS正确的头文件的位置,打开ConsoleApplication1的项目属性:

技术分享


这里的三个选项都只会影响到vsIntelliSense的分析结果,但这几个参数都不会传递给编译器!不会影响编译器的行为!

包含目录选项会影响到VS在查找头文件时的行为。

强制包含文件中可以处理gcc编译器和vc编译器之间的一些差异,如gcc中的__attribute__VS并不支持,因此可以在强制包含的文件中将其定义为空:

#define __attribute__(x)

这样VS就可以正确分析代码了。

预处理器定义的作用和强制包含文件一样,也是方便VS分析代码。

在做了这个配置后,VS就不会有红色的错误提示了:

技术分享


stdio.h上右键选择打开文档,可以发现VS正确打开了我们复制过来的/usr/include目录下的stdio.h,而不是VC里的stdio.h

再试一下vc所不支持的pthread

技术分享


可以发现,IntelliSense完全可以正确地显示提示,YEAH~~~~

 


1.4    输出目录与中间目录配置


接下来配置输出目录和中间目录:

技术分享


这里的参数含义和其它VC项目一致,也可以使用MSBUILD中的变量。

在此将输出目录和中间目录修改我们需要的路径,需要注意的是,这里的路径必须保证可以在Linux下访问!!

如我们项目使用了虚拟机的共享功能,它的Linux访问路径是/mnt/hgfs/projects/,在windows下的访问路径为:F:\projects\,而这个项目放在F:\projects\tmp\ConsoleApplication目录下,在Linux下的访问路径就是/mnt/hgfs/projects/src/ConsoleApplication,因此这个设置是没有问题的。

此处需要注意的第二个问题是大小写的问题,因为这个路径是需要在Linux下访问的,因此必须区分大小写。

 


1.5    更改编译主机配置


当生成工程时,VELT必须登录编译主机进行项目编译,因此接下来更改编译主机配置:

技术分享


这里仍然需要注意的是Windows访问路径的大小写和路径结尾的斜杠。

如前所述,/mnt/hgfs/projects/Linux下的共享路径,F:\projects\则是映射过来的windows路径,二者指向的必须是同一个位置!

VELT登录到编译主机后,会将此处配置的可执行文件目录添加到PATH环境变量前面,因此这里的可执行文件目录必须是在编译主机上的Linux路径,此路径不会在windows下使用,也没有共享的要求。


1.6    更改目标机配置


在编译完成后,可以使用VELT进行调试,因此必须配置目标机的参数:

技术分享


由于我们的目标机就是编译主机,因此这两个配置是相同的。

这里的目标连接类型支持sshtelnet两种方式,本项目使用SSH

VELT登录到目标主机后,会将此处配置的可执行文件目录添加到PATH环境变量前面,因此这里的可执行文件目录必须是在目标主机上的Linux路径,此路径不会在windows下使用,也没有共享的要求。

VELT登录到目标主机后,会将此处配置的库目录添加到LD_LIBRARY_PATH环境变量前面,因此这里的目录必须是在目标主机上的Linux路径,此路径同样不会在windows下使用,也没有共享的要求。 


1.7    工程编译


在完成上述配置之后就可以按F7生成解决方案了:

技术分享


在资源管理器下可以看到F:\projects\tmp\ConsoleApplication1\bin\Linux\Debug下生成了一个叫ConsoleApplication1的文件。

我们到Linux下运行它:

技术分享


一切正常。

1.8    调试器配置


接下来试试调试功能,首先配置调试参数:

技术分享



这里的命令参数不可更改,只能配置为$(RemoteConsole),这是和VC项目不同的地方!

命令参数可以配置为要传递给应用程序的参数。

当调试开始前,VELT将进入工作目录后启动gdb,因此这里的工作目录为目标机器上的目录,我们将其配置为项目的输出路径。

在登录目标主机后,VELT可以执行这里定义的调试前命令,在嵌入式系统开发中,可以在此将程序通过TFTP等协议下载到目标主机中,此项目中留空。 


1.9    调试


试试在main这里设置一个断点,启动调试:

技术分享


F5GO....

技术分享


此时的console输出:

技术分享


试试单步执行,一切正常!

1.10    不调试运行


再试试按Ctrl + F5,不调试运行,很不幸的是加载失败:

技术分享


修改工作目录为F:\projects\tmp\ConsoleApplication1\bin\Linux\Debug

技术分享


搞定!





??

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。