Linux培训一.在linux下使用eclipse下进行嵌入式linux开发使用环境:VMware7.1.4Ubuntu10.10我们是在windows下安装VMware7.1.4虚拟机,在虚拟机上安装Ubuntu10.10。Vmware和Ubuntu安装步骤省略。请参考资料中文档。习惯了在windows环境下开发的程序员在转到Linux平台时经常会抱怨没有一个好用的集成开发环境。和windows下常用的一些开发软件相比,Linux自带的一些开发环境使用起来要么界面和操作不够方便、友好,要么功能不全。其实我们完全可以在开源社区上找到操作方便,功能强大的开发环境。下面就向大家介绍一个能在Linux上运行,界面和功能与windows上同类软件相似的开发平台eclipse。eclipse是著名的跨平台的集成开发环境(IDE),最初是由IBM公司开发的替代商业软件VisualAgeForJave的下一代开发环境。2001年,IBM将eclipse贡献给开源社区,现在由eclipse基金会管理。2005年7月,eclipse稳定版3.1.0发布,目前最新的稳定版本是3.4。eclipse本身只是一个框架平台,最初主要用于java语言的开发。但是众多插件的支持使得eclipse同样可以用来开发其他的语言,如c/c++、c#、perl、cobol的等等。cdt(c/c++developmenttoolkit)就是支持c/c++开发的插件。许多软件开发商也以eclipse为框架推出了自己的集成开发环境。由于eclipse平台用java实现,所以运行时需要jre(javaruntimeenvironment)的支持。下面我们以ubuntu(linux发行版的一种)为例,介绍如何在linux上使用eclipse+cdt来进行嵌入式Linux应用程序的开发。(一)、安装软件在ubuntu下安装软件有两种方法:使用apt-get来自动安装或手动安装。用户使用自动安装非常方便,适合初学者。但是安装过程过于依赖资源网站的连接状况,可能需要耗费过多的时间。这里我们推荐手动安装的方式,花的时间比较短。1、安装jdkjdk(javadevelopmentkit)即java开发包,其中包含了运行eclipse所需要的jre.ubuntu缺省安装的gnu版本的jre运行效率不高,所以我们需要安装sun公司的jre.首先从sun的网站上()下载安装包jdk-6u7-linux-i586.bin,然后如下进行安装:#mkdir-p/opt/java#./jdk-6u7-linux-i586.bin//执行自解压文件,生成目录#mvjdk1.6.0_07/opt/java//把目录移到/opt/java下#cd/opt/java#ln-sjdk1.6.0_07jdk#mv/etc/alternatives/java/etc/alternatives/java.gnu#ln-s/opt/java/jdk/bin/java/etc/alternatives/java#exportJAVA_HOME=/opt/java/jdk//设置环境变量2、安装eclipse和cdt从eclipse网站上()下载安装包eclipse-SDK-3.4-linux-gtk.tar.gz和cdt-master-5.0.0.zip#cd/opt#tarzxvfeclipse-SDK-3.4-linux-gtk.tar.gz//解压生成eclipse目录#exportPATH=/opt/eclipse:$PATH#mkdir-p/opt/cdt#cd/opt/cdt#unzipcdt-master-5.0.0.zip#cp-rplugins/*/opt/eclipse/plugins/#cp-rfeatures/*/opt/eclipse/features/(二)、创建c/c++工程假设我们已经在linux上安装好了arm交叉工具链,下面介绍如何创建、交叉编译和调试c/c++工程。为了更直观的说明,我们截取了相关的图片:进入eclipse安装路径后,运行eclipseeclipse运行界面创建c工程使用缺省的LinuxGCC工具链进入c/c++界面添加源代码文件1添加源代码文件2编辑代码设置工程属性,指定交叉工具链1设置工程属性,指定交叉工具链2设置工程属性,指定交叉工具链3编译工程已生成arm平台可执行代码配置调试选项设置Debugger和GDBdebugger选项设置连接类型为TCP,目标板的ip地址和调试端口号。端口号任意指定,通常大于1024(避免和系统所用端口号冲突)在开发板上运行程序,格式如上图所示:gdbserver是交叉调试辅助程序;192.168.0.150是主机的ip地址;1234是调试端口号,和eclipse调试选项里设定的端口号要一致点击Debug,进入调试界面执行到断点eclipse的调试界面和操作和在windows下开发类似,相信到了这一步,大家已经可以很方便来进行应用程序的开发了。二.Linux环境下使用Eclipse开发C++动态链接库程序Linux中也有类似Windows中DLL的变成方法,只不过名称不同而已。在Linux中,动态链接叫做StandardObject,生成的动态链接文件为*.so。1.创建动态链接库(1)在Eclipse中创建新的C++工程File-New-Project-C++-C++Project,选择SharedLibrary。(2)创建源代码文件File-New-SourceFile,指定名称为shared.cc(3)编写源码viewplaincopytoclipboardprint?/**Test.cc**Createdon:Oct10,2009*Author:fify*/#includeiostreamusingnamespacestd;voidshow(){coutSharedLibrary.endl;}/**Test.cc**Createdon:Oct10,2009*Author:fify*/#includeiostreamusingnamespacestd;voidshow(){coutSharedLibrary.endl;}编译之后将在工程目录下生成一个libshared.so文件,这就是我们要用的动态链接库文件2.调用动态链接库文件(1)创建C++工程,选择Executable类型工程(2)添加SourceFile,并编写源码viewplaincopytoclipboardprint?//============================================================================//Name:Import.cpp//Author:Fify//Version://Copyright:Fifycopyleft//Description:HelloWorldinC++,Ansi-style//============================================================================#includeiostreamusingnamespacestd;voidshow();intmain(){show();return0;}//============================================================================//Name:Import.cpp//Author:Fify//Version://Copyright:Fifycopyleft//Description:HelloWorldinC++,Ansi-style//============================================================================#includeiostreamusingnamespacestd;voidshow();intmain(){show();return0;}(3)设置导入动态库Project-Properties-C/C++Build-Settings-ToolSettings-GCCC++Linker-Libraries添加Libraries(-l):shared添加Librarysearchpath(-L):{刚才编译生成的*.so文件路径}(4)编译该项目3.运行含动态链接库的程序点击运行,会出现以下错误:errorwhileloadingsharedlibraries:libShared.so:cannotopensharedobjectfile:Nosuchfileordirectory,因为系统无法从默认位置找到动态链接库文件。修改系统默认搜索链接库的路径,程序即可顺利执行,输出:SharedLibrary.修改动态库搜索路径的方法有五种,参考:,这里不在详细介绍众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及该动态库的其它资源了。在Linux中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定。方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径。可以通过编辑配置文件/etc/ld.so.conf来指定动态库的搜索路径,该文件中每行为一个动态库搜索路径。每次编辑完该文件后,都必须运行命令ldconfig使修改后的配置生效。我们通过例1来说明该方法。例1:我们通过以下命令用源程序pos_conf.c(见程序1)来创建动态库libpos.so,详细创建过程请参考文[1]。#gcc-cpos_conf.c#gcc-shared-fPCI-olibpos.sopos_conf.o##includestdio.hvoidpos(){printf(/root/test/conf/lib\n);}程序1:pos_conf.c接着通过以下命令编译main.c(见程序2)生成目标程序pos。#gcc-oposmain.c-L.-lpos#voidpos();intmain(){pos();return0;}程序2:main.c然后把库文件移动到目录/root/test/conf/lib中。#mkdir-p/root/test/conf/lib#mvlibpos.so/root/test/conf/lib#最后编辑配置文件/etc/ld.so.conf,在该文件中追加一行/root/test/conf/lib。运行程序pos试试。#./pos./pos:errorwhileloadingsharedlibraries:libpos.so:cannotopensharedobjectfile:Nosuchfileordirectory#出错了,系统未找到动态库libpos.so。找找原因,原来在编辑完配置文件/etc/ld.so.conf后,没有运行命令ldconfig,所以刚才的修改还未生效。我们运行ldconfig后再试试。#ldconfig#./pos/root/test/conf/lib#程序pos运行成功,并且打印出正确结果。方法二:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。通过设定环境变量LD_LI