visual studio上搭建arm交叉编译环境

来源:互联网 发布:ssh ajax json 实例 编辑:程序博客网 时间:2024/05/20 15:38

前言

最近使用SlickEdit进行arm9应用程序的开发,感觉代码编辑、查找、定义跳转、函数引用处查询等功能非常不好用,这可能是由于我之前都是在visual  studio(vs)上进行代码的开发的原因,个人感觉作为集成开发环境,VS+VA 进行代码的开发是最方便,最好用的,所以就尝试了下,在visual studio 2013上建立一个arm的交叉编译环境,经过两天的资料查询和调试,终于编译成功。

本人搭建arm交叉编译环境,需要电脑安装如下软件:

1,  cgywin

2,  visual studio2013(其他版本没有验证)

3,  visual gdb

当然VS上也安装了VA助手,此工具非常强悍,没用过的可以自行查询下载visual assist x,此工具瞬间可以让VS好用很多倍。

有关具体的搭建方法,正在整理中,后续会出一个详细的搭建过程,希望能够给感兴趣的朋友一定的参考。下面上一个搭建完成,运行后的截图。有点遗憾,不能在windows下运行断点调试,gcc和g++编译器编译的代码是可以在vs下运行调试的,可能arm编译器差生的调试信息,visual gdb还不能翻译,这里可以作为代码编辑和编译环境还是比SE好用很多的。

Arm9编译器配置:


修改后的makefile


编译结果输出,可看到使用的是arm-unknow-linux-gnu-g++编译器编译成功,可生成APP、Share 库文件、Static 库文件,根据需要修改makefile即可,后续会介绍生成app、so、a文件的方式。

软件安装

安装方法,主要介绍cygwin的安装和cygwin中arm9交叉编译环境的建立,至于vs的安装,visual gdb的安装非常简单,就不做介绍。

一 Visual gdb的安装使用可参考如下文章:

http://blog.csdn.net/wu936754331/article/details/49305377

此文章讲解的方式是visualgdb+vmware的方式,此方式还需虚拟机,比较麻烦,有兴趣的可以研究下,我介绍的方式是使用cygwin。我用的版本是

VisualGDB_5.0_beta2.rar

下载地址:http://download.csdn.net/download/u010144805/10150891

在自己在网上很容易找到安装包和破解文件。

 

二 visual assist X介绍和使用说明,使用过vs的应该都用过

http://blog.csdn.net/luoweifu/article/details/48852119

安装包和破解方式如下:

下载地址: http://download.csdn.net/download/u010144805/10151056

三sygwin安装和arm9交叉编译的配置

Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnussolutions公司开发的自由软件(该公司开发的著名工具还有eCos,不过现已被Redhat收购)。它对于学习UNIX/Linux操作环境,或者从UNIXWindows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用GNU工具集在Windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对Cygwin产生了兴趣。[1] 

Cygwin 提供一个UNIX 模拟DLL以及在其上层构建的多种可以在 Linux系统中找到的软件包,在 Windows XP SP3以上的版本提供良好的支持。Cygwin主要由Red Hat及其下属社区负责维护。

以上是百度百科的介绍,想要深入研究,可上网搜搜,网上很多文章写的都很不错,下面介绍下安装过程。

cygwin软件的安装请参考下文,这个说的比较详细。

http://blog.csdn.net/superbinbin1/article/details/10147421

1,  网上下载安装程序:(https://cygwin.com/install.html),我的是64位win7,下载后文件为setup-x86_64.exe,双击安装程序,点击下一步。


2,  选择installfrom Internet,点击下一步。


3,  选择安装目录,点击下一步。


4,  选择本地保存包目录,就是保存各种安装包文件的目录,点击下一步


5,  需要联网,如果没有代理,直接下一步,如果有代理,请配置。


6,  选择下载源,这里选择:http://mirrors.neusoft.edu.cn,如果没有手动添加,如果连接不上也可以试下如下国内的源:

http://mirrors.163.com/cygwin/

 

7,  选择下载包列表,空间够网速好的话,可以全部安装,点击all后面Default,会变成install 表示全部安装,如果不需要,可以把Devel 变成install,其他默认,下一步,等待安装结束。

安装结束后,打开cygwin,可在此终端界面进行linux的各种操作,下面介绍下arm9编译器的安装方式,这里仅仅介绍最简单的方式,如需深入了解可参考;

http://blog.csdn.net/chief1985/article/details/4209928

http://blog.sina.com.cn/s/blog_6524fd1f0101mu0g.html

 

首先下载别人编译好的cygwin交叉编译其包,如果找不到就只能自己编译了,根据自己的平台选择合适的交叉编译包,我使用的是arm9的,网上很多包,下载了一个arm-linux-toolchain-cygwin的包,把包复制到cygwin目录下的一个文件夹中解压,解压后记住解压的路径,配置环境变量,把文件夹下的bin目录加入路径,然后在cygwin终端里,输入g++直接输入编译器全称  -v,我的是arm-unknown-linux-gnu-g++.exe –v 会出下编译器信息,则说并cygwin下交叉编译环境配置好了,可以用此编译器随便编译一个测试代码,看是否正常。

完成编译环境搭建

现在开始介绍在visual  studio2013上建立arm9代码编辑和编译的环境。


首先,打开vs2013,file->new->project,在Templates选项卡下选择visualGDB,如果没有此选项说明visual gdb没有安装成功,请重新按章,在此选项卡下选择MinGW/Cygwin Project Wizard,在下面填好项目名称及项目保存路径,点击OK。

         进入New MinGW/CygwinProject后,选择Create a new Project,随便选择一个类型,我们只是让其自动产生一个GNU Makefile的模版,后续编译选项和makefile要根据实际使用的编译器和代码进行修改,点击next。


Toolchain选择ManuallyLocate a Cygwin-based tool chain 指定到cygwin的安装路径,点击finished。


等待自动生成测试工程和makefile模版。


生成后的测试工程如下图所示,包含makefile配置文件,debug.mak /release.mak/makefile及测试代码arm9projtest.cpp

 

右键工程选择proerties,进入属性页面,选择NMake,可以在这里进行相关的配置,比如进行预编译定义,来选择导入的makefile配置文件,可以默认不改,此配置下是debug模式,makefile会自动导入debug.mak的相关定义,所以我们可以删除release.mak文件,反正代码编译都是根据makefile来的,想编译成debug还是release只要修改下g++参数即可,这里我们采用默认的方式。

在Solution中右击工程会发现多出一个visual  GDB project properties,打开可一看到visualGDB 的很多配置选项。


    这里注意修改一个地方,如果不修改VA是没法用的,如果VA没法用那是很痛苦的事情,修改如下图所示,把Intellisense engine,修改为visual studio intellisense engine:


到此算是把交叉编译工程框架打好了,后面进入makefile修改和生成so、a库及应用程序的介绍。

默认生成的debug.mak配置是使用linux的g++和gcc编译器进行编译的,此编译器cgywin能够很好的支持和转换,因此可以直接在vs2013下运行和断点调试,如果仅仅是开发linux代码,使用这种方式开发是非常方便的,可以不需要改写任何东西,只需要通过此方式建立工程后,删除测试代码,add自己的代码到工程里后,直接build,即可生成运行文件,可按F5直接运行,单步断点调试都可以用。



makefile修改及编译

 debug.mak是makefile的配置文件,此文件通过makefile中如下语句导入到makefile中,作为makefile特定变量的定义文件。


下面是debug.mak文件,应该很容易理解。

#DO NOT EDIT THIS FILE MANUALLY UNLESS YOU ABSOLUTELY NEED TO

#USE VISUALGDB PROJECT PROPERTIES DIALOG INSTEAD

# BINARYDIR编译产生的文件及目标文件路径,这里在当前文件的Debug目录中

BINARYDIR := Debug

#下面是编译器的选择

#Toolchain

CC := D:/cygwin64/bin/gcc.exe

CXX := D:/cygwin64/bin/g++.exe

LD := $(CXX)

AR := D:/cygwin64/bin/ar.exe

OBJCOPY :=

#下面是头文件包含路径及依赖库目录及名称

#Additional flags

PREPROCESSOR_MACROS := DEBUG

INCLUDE_DIRS :=

LIBRARY_DIRS :=

LIBRARY_NAMES :=

ADDITIONAL_LINKER_INPUTS :=

MACOS_FRAMEWORKS :=

LINUX_PACKAGES :=

#编译参数的配置

CFLAGS := -ggdb -ffunction-sections-O0

CXXFLAGS := -ggdb -ffunction-sections-O0

ASFLAGS :=

LDFLAGS := -Wl,-gc-sections

COMMONFLAGS :=

 

这里我们需要采用arm9的编译器,因此只需把Toolchain按照如下方式修改:

#Toolchain

CC := D:/cygwin64/arm-cross/usr/bin/arm-unknown-linux-gnu-gcc.exe

CXX :=D:/cygwin64/arm-cross/usr/bin/arm-unknown-linux-gnu-g++.exe

LD := $(CXX)

AR := D:/cygwin64/arm-cross/usr/bin/arm-unknown-linux-gnu-ar.exe

    此处修改完后,编译时就会使用此处定义的编译器进行代码编译。

有关编译参数的配置,根据自己需要在addition flag中配置,我的参数配置如下:

#Additional flags

PREPROCESSOR_MACROS := NDEBUG RELEASE

INCLUDE_DIRS := ../../../include

LIBRARY_DIRS :=

LIBRARY_NAMES :=

ADDITIONAL_LINKER_INPUTS :=

MACOS_FRAMEWORKS :=

LINUX_PACKAGES :=

APPOUTPUT_PATH := ../../../output

 

CFLAGS := -Wall -Wextra -ffunction-sections -O3

CXXFLAGS := -Wall -Wextra-ffunction-sections -O3

ASFLAGS :=

LDFLAGS := -Wl,-gc-sections

COMMONFLAGS :=

 

配置完成之后,直接build工程,即可查询编译结果。

 

Makefile文件系统会根据debug.mak的配置及源文件的变动自动重新生成后再执行make,所以在工程中添加和删除源文件,不需要修改makefile,只需要重新编译即可。

Makefile中如下定义,是定义输出文件文件名称和输出文件类型。

TARGETNAME := arm9projtest

#TARGETTYPE can be APP, STATIC or SHARED

TARGETTYPE := APP

APP及生成可执行二进制文件,生成的文件可以直接在arm板终端下运行,如上定义最终将在Debug下生成arm9projtest。

如果源文件需要生成动态库.so,可按照如下配置,当然代码中要包含对外输出接口。

TARGETNAME := arm9projtest.so

#TARGETTYPE can be APP, STATIC or SHARED

TARGETTYPE := SHARED

静态库的生成,修改makefile如下:

TARGETNAME := arm9projtest.a

#TARGETTYPE can be APP, STATIC or SHARED

TARGETTYPE := STATIC


    至此arm9的开发编译环境已经介绍完了,后面介绍下,如何快速建立工程,把以前的代码移植到vs上。

首先我们按照上述方式建立一个测试工程,配置好编译环境。

然后从vs工程中删除测试代码,添加我们自己的代码到工程中。

最后在Makefile中修改目标名称和目标类型,重新编译,即可生成我们自己的目标文件。

 

如果开放项目比较大,有很多个工程需要建立,这里介绍一个便捷的方式。

1,把配置好的工程文件夹复制一份,把文件夹名称修改为新的工程名称,例如:员工称文件夹为arm9projtest,复制一份修改为aaa1。


2,进入aaa1,保留如下文件其余都删除,这里我用的是debug.mak,如果建立工程使用的配置为release.mak请保留release相关的文件。


3,把文件命中arm9projtest都改为aaa1。


4, 选择arm9projtest.vcxproj文件,用文本编辑器打开,把如下内容修改一为aaa1,绿色标注的两个地方:


5,打开VS 工程,选择Solution右击->ADD->ExistingProject 选择我们修改的工程arm9projtest.vcxproj,添加到Solution中。


删除掉工程的源文件,添加自己的源文件到工程中,修改makefile目标名称和目标类型,然后编译即可。

下面截图是我的整个项目工程的搭建结果:


再说下编译依赖库及文件路径的配置的地方,在debug.mak文件中:

INCLUDE_DIRS:= ../../../include

LIBRARY_DIRS:= ../../../output

LIBRARY_NAMES:= arm9eisuv2link arm9eisuv2analysexml arm9eisuv2public

有关清理可能会报错,清理不掉,可以在makefile中做如下修改:

clean:

#ifeq ($(USE_DEL_TO_CLEAN),1)

    #del /S /Q $(BINARYDIR)

#else

    rm -rf $(BINARYDIR)

#endif

原创粉丝点击