问题合集 ------- 用 Eclipse 平台进行 C/C++ 开发

Linux 同时被 2 个专栏收录
56 篇文章 1 订阅
171 篇文章 4 订阅

转自 https://www.ibm.com/developerworks/cn/linux/opensource/os-ecc/


简介: 我们将概述如何在 C/C++ 开发项目中使用 Eclipse 平台。尽管 Eclipse 主要是一个 Java 开发环境,但其体系结构确保了对其它编程语言的支持。在本文中,您将学习如何使用 C/C++ 开发工具箱(C/C++ Development Toolkit,CDT),它是可用于 Eclipse 的最佳 C/C++ 工具箱。

本文的标签:  ccppeclipseecllipselinux用eclipse平台进行c_c__开发


--------------------------------------------------------------------------------------------------------------------------------------------------------------

C 和 C++ 语言都是世界上最流行且使用最普遍的编程语言, 因此 Eclipse 平台(Eclipse Platform)提供对 C/C++ 开发的支持一点都不足为奇。 因为 Eclipse 平台只是用于开发者工具的一个框架,它不直接支持 C/C++;它使用外部插件来提供支持。 本文将向您演示如何使用 CDT — 用于 C/C++ 开发的一组插件。CDT 项目(有关链接, 请参阅本文后面的 参考资料一节)致力于为 Eclipse 平台提供功能完全的 C/C++ 集成开发环境(Integrated Development Environment,IDE)。 虽然该项目的重点是 Linux,但它在可使用 GNU 开发者工具的所有环境(包括 Win32(Win 95/98/Me/NT/2000/XP)、QNX Neutrino 和 Solaris 平台)中都能工作。

CDT 是完全用 Java 实现的开放源码项目(根据 Common Public License 特许的),它作为 Eclipse SDK 平台的一组插件。这些插件将 C/C++ 透视图添加到 Eclipse 工作台(Workbench)中, 现在后者可以用许多视图和向导以及高级编辑和调试支持来支持 C/C++ 开发。

由于其复杂性,CDT 被分成几个组件,它们都采用独立插件的形式。 每个组件都作为一个独立自主的项目进行运作,有它自己的一组提交者、错误类别和邮件列表。 但是,所有插件都是 CDT 正常工作所必需的。 下面是 CDT 插件/组件的完整列表:

  • 主 CDT 插件(Primary CDT plug-in)是“框架”CDT 插件。
  • CDT 功能 Eclipse(CDT Feature Eclipse)是 CDT 功能组件(Feature Component)。
  • CDT 核心(CDT Core)提供了核心模型(Core Model)、CDOM 和核心组件(Core Component)。
  • CDT UI是核心 UI、视图、编辑器和向导。
  • CDT 启动(CDT Launch)为诸如编译器和调试器之类的外部工具提供了启动机制。
  • CDT 调试核心(CDT Debug Core)提供了调试功能。
  • CDT 调试 UI(CDT Debug UI)为 CDT 调试编辑器、视图和向导提供了用户界面。
  • CDT 调试 MI(CDT Debug MI)是用于与 MI 兼容的调试器的应用程序连接器。

现在,让我们研究一下如何在实际应用程序中使用这些组件。图 1 显示了 Eclipse 中的 C/C++ 项目:


图 1. 在带有 CDT 插件的 Eclipse 中编辑 C/C++ 项目

安装和运行 CDT

在下载和安装 CDT 之前,首先必需确保 GNU C 编译器(GNU C compiler,GCC)以及所有附带的工具(make、binutil 和 GDB)都是可用的。 如果正在运行 Linux,只要通过使用适用于您分发版的软件包管理器来安装开发软件包。 在 Windows平台上,将需要安装 Cygwin 工具箱(请参阅 参考资料以获得链接)。Cygwin 是用于 Windows 的类 UNIX 环境,它包括 GCC 移植以及所有必需的开发工具,包括 automake 和 GNU 调试器(GNU Debugger,GDB)。Cygwin 是在 cygwin1.dll 库基础上构建的。Cygwin 的备用解决方案是 Minimalist GNU for Windows(MinGW)(请参阅 参考资料以获得链接)。 该工具是一组可免费获取、自由分发的特定于 Windows 的头文件和导入库,这些头文件和导入库与 GNU 工具集(它们允许您生成不依赖于任何第三方 DLL 的本机 Windows 程序)结合在一起。 如果您想要创建与 POSIX 兼容的 Windows 应用程序,那么 MinGW 是最佳选择。MinGW 甚至可以在 Cygwin 安装之上工作。 Solaris和 QNX要求您从因特网下载并安装其特定的 GCC、GNU Make binutils 和 GDB 移植(请参阅 参考资料以获得链接)。

假设您安装了适当的 Java SDK/JRE 和 Eclipse 平台 SDK,并且它们都正常运行。CDT 以两种“方式”可用:稳定的发行版和试运行版(nightly build)。 试运行版未经完全测试,但它们提供了更多的功能并改正了当前错误。 安装之前,请检查磁盘上是否存在先前版本的 CDT,如果存在,请确保完全除去它。 因为 CDT 没有可用的卸载程序,所以需要手工除去它。 为了检查先前版本是否存在,转至 CDT 插件所驻留的目录: eclipse/plugins 。 接着,除去所有以 org.eclipse.cdt 名称开头的目录。需要做的最后一件事情是从 workspace/.metadata/.plugins 和 features 除去 CDT 元数据目录 or.eclipse.cdt.* 。

下一步是下载 CDT 二进制文件。注意:请下载适合于您操作系统的正确的 CDT。遗憾的是,即使 CDT 是用 Java 编写的,它也不是与平台无关的。 接着,将归档文件解压到临时目录中,从临时目录将所有插件目录内容都移到 Eclipse plugins 子目录。还需要将features 目录内容移到 Eclipse features 子目录中。现在,重新启动 Eclipse。Eclipse 再次启动之后, 更新管理器将告诉您它发现了更改并询问您是否确认这些更改。 现在您将能够看到两个可用的新项目:C 和 C++。


--------------------------------------------------------------------------------------------------------------------------------------------------------------


创建新项目

在 Eclipse 中安装 CDT 之后, 浏览至 File => New => Project,在那里,您将发现三个新的可用项目类型:C(“Standard C Make Project”)、C++(“Standard C++ Make Project”)和“Convert to C or C++ Projects”。 从“Standard Make C++ Project”开始,为您的项目创建源代码文件。在 C/C++ Projects 视图中,单击鼠标右键,然后选择 New => Simple => File。命名您的文件并保存它。您可能会用这种方法创建许多头文件以及 C/C++ 实现代码文件。 最后当然是 Makefile,GNU Make 将使用它来构建二进制文件。对该 Makefile 使用常见的 GNU make 语法(请参阅 参考资料)。 请记住:Makefile 要求您使用 Tab 字符而不是空格来产生缩进行。

您通常会将现有的源代码导入 Eclipse(请参阅图 2)。CDT 为执行这一操作提供了一种便捷的方法:即使用 Import 向导,将文件从文件系统目录复制到工作台。转至主菜单栏,选择 File => Import => File System。单击 Next,打开源目录,选择您想要添加文件的目录。 单击 Select All 以选择目录中的所有资源,然后从头到尾检查,取消选择您不打算添加的那些资源。 指定将作为导入目标的工作台项目或文件夹。还可以通过从文件系统拖动文件夹和文件并将它们放入 Navigator 视图中, 或者通过复制和粘贴来导入文件夹和文件。


图 2. 将现有的源代码导入 CDT 项目

--------------------------------------------------------------------------------------------------------------------------------------------------------------


关键的 CDT IDE 功能

CDT IDE 是在 CDT UI 插件所提供的通用可扩展编辑器基础上构建的。然而,该模块仍处于开发阶段,所以它仍缺少一些重要的实用程序, 如类浏览器或语言文档浏览器。CDT IDE 的主要功能是:

  • 语法突出显示:CDT IDE 识别 C/C++ 语法,并为语法突出显示提供了完全可配置的代码着色以及代码格式化功能:

图 3. 不成功的编译之后突出显示的语法错误标记

  • 提纲:Outline 窗口模块提供了有关出现在源代码中的过程、变量、声明以及函数的快速视图。 利用 outline,您可以方便地找到源代码中的适当引用,或者甚至搜索所有项目源代码。
  • 代码辅助:这个代码完成功能类似于可在 Borland C++ Builder 或 MS Visual Studio 中找到的功能。 它使用了 代码模板,并且只有助于避免愚蠢的语法错误:

图 4. 有助于使用正确的语言语法的代码辅助功能

  • 代码模板:由代码辅助功能使用的代码模板是标准 C/C++ 语言语法结构的定义。您也可以定义自己的代码模板来扩展您自己的快捷键,如用于 author 或 date 关键字的快捷键。在 Window => Preferences => C/C++ => Code Templates 中,可以添加新模板并查看完整的模板列表。 也可以将模板作为 XML 文件导出和导入。

图 5. 预定义的 C/C++ 代码模板 


  • 代码历史记录:即使您没有使用 CVS 或其它源代码版本管理软件,也可以跟踪项目源代码中的本地更改。 在选择的文件上单击鼠标右键,从上下文菜单选择 Compare With => Local History...

图 6. 用 Local History 功能检查源代码中的更改


--------------------------------------------------------------------------------------------------------------------------------------------------------------

构建并运行项目

CDT 提供了一种设置项目构建选项的简单方法。CDT 依赖于三个 GNU 工具:GCC、GDB 和 Make。因此,对用于调试的 GDB 或用于编译的 GCC 和 Make 的依赖要求这些应用程序可用于用户想要使用的平台。 大多数 Linux(通常和类 POSIX)源代码软件包使用 autoconf 脚本来检查构建环境, 所以您必需运行 configure 命令,该命令在编译之前创建“Makefile”。CDT 没有提供编辑 autoconf 脚本的方法,所以必需手工编写它们;然而,您可以配置构建选项以在编译之前调用 configure 命令。

如果通过调用 make 命令来构建项目, 那么缺省设置没问题,但是,如果使用一种更复杂的方法进行构建,则必需在 Build Command 文本框中 输入适当的命令(例如, make -f make_it_all )。接下来,在 C/C++ Projects 视图中,选择 C/C++ project,然后单击鼠标右键并选择 Rebuild Project。所有来自 make、编译器和链接程序的编译消息都被重定向到控制台窗口:


图 7. 带编译器输出的控制台窗口

编译成功之后, 您或许想要运行您的应用程序。所有用于运行和调试的选项都位于主 Eclipse 菜单的 Run 菜单下。 然而,必须在早期定义用于运行项目的选项。可以通过转至主菜单(在那里,有用于运行应用程序的不同概要文件)中的 Run... 选项来完成这一步;例如,可以将一个概要文件用于测试目的,而将另一个概要文件用于运行最终版本。 另外,可以定义希望要传递给应用程序的参数,或者可以设置环境变量。 其它选项用于设置调试选项,例如使用哪个调试器(GNU GDB 或 Cygwin GDB)。 图 8 显示了正在为项目创建运行概要文件(run profile)。


图 8. 为项目创建运行概要文件

当进入 C/C++ Projects 视图,选择您的项目,单击鼠标右键并在 Build Settings 选项卡上选择 Properties 之后,就可以使用更多的用于构建项目的常用选项。这些选项主要影响因遇到编译错误而使构建停止时所发生的情况。


--------------------------------------------------------------------------------------------------------------------------------------------------------------

调试 C/C++ 项目

CDT 扩展了标准的 Eclipse Debug 视图, 使之具备了调试 C/C++ 代码的功能。Debug 视图允许您在工作台中管理程序的调试或运行。要开始调试当前项目,只要切换到 Debug 视图, 您将能够在代码中设置(并在执行过程中随时更改)断点/监测点并跟踪变量和寄存器。Debug 视图显示正在调试的每个目标的暂挂线程的堆栈框架。 程序中的每个线程都作为树中的一个节点出现,Debug 视图显示正在运行的每个目标的进程。

Eclipse 通过 CDT 调试 MI(CDT Debug MI)插件(其组件之一)支持与机器接口(Machine Interface,MI)兼容的调试器。 但 MI 调试器究竟是什么呢?通常情况下,象 ddd 和 xxgdb(请参阅 参考资料以获得链接)之类的第三方 GUI 调试器在实现调试功能时都依赖于 GDB 的命令行接口(Command Line Interface,CLI)。 遗憾的是,经过证实该接口非常不可靠。GDB/MI 提供了一种新的面向机器的接口, 它非常适合于想要直接解析 GDB 输出的程序。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

结束语

C/C++ 开发工具箱(CDT)提供了一组功能强大的插件,这些插件可以帮助您用 Eclipse 开发 C/C++ 应用程序。虽然 CDT 仍处于开发阶段, 但您可以利用其现有的诸多功能。


参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文

  • 请加入 Eclipse 平台社区,并从 eclipse.org下载该平台。Eclipse 平台源代码是根据 Common Public License 特许的。在 eclipse.org 上,您还将找到有关 Eclipse 项目的术语词汇表和描述,以及技术文章和新闻组。Eclipse 平台白皮书详细描述了 Eclipse 的主要组件和功能。 

  • 从 eclipse.org 下载 CDT 项目的组件。 

  • 请访问 eclipse.org 上的 新闻组, 以获取与 C/C++ 插件相关的技术讨论和问题。 

  • 开发人员可以通过为该项目中每个组件所创建的 开发人员邮件列表(developer mailing lists)来参与和 C/C++ IDE 实现相关的讨论。 

  • CDT 项目使用 bugzilla 作为其错误和功能跟踪系统。 在 Eclipse bugzilla 页上输入错误/功能报告与填写 Web 表单一样简单。 

  • 有关 Eclipse 平台及其工作原理的入门文章,请参阅由 Greg Adams 和 Marc Erickson 合著的 developerWorks文章“Working the Eclipse Platform”。 

  • 要开始使用 Eclipse 平台开发应用程序,请参阅由 David Gallardo 撰写的 developerWorks文章“ Getting started with the Eclipse Platform”。 

  • 如果您有兴趣创建自己的 Eclipse 插件,请参阅由 David Gallardo 撰写的 developerWorks文章“ 开发 Eclipse 插件”。 

  • 从 Red Hat 下载 Cygwin 工具箱。 

  • 从 MinGW.org 下载 MinGW 工具箱。 

  • 在 gnu.org 上学习有关 GNU make 语法的更多知识。 

  • 从 gnu.org 下载 dddGUI 调试器。 

  • 下载 xxgdbGUI 调试器。 

  • 请访问 WebSphere Studio Plug-in Central,以获取已被验证为“Ready for WebSphere Studio Software”的插件的目录。 

  • 学习 IBM WebSphere Studio 工具的一个扩展, 它提供了有助于您使用这些工具的信息和工具。 由于所有 WebSphere Studio 工具都基于 WebSphere Studio 工作台(WebSphere Studio Workbench),而工作台基于 Eclipse 框架, 所以很容易通过使用 Eclipse 帮助扩展功能来扩展产品文档。 请参阅文章“ Adding Self-Help Support to WebSphere Studio Tools by Extending their Eclipse Help Systems”。 

  • 请在 developerWorks上查找更多的 Eclipse 用户参考资料。 

================================================================================================================


Eclipse快捷键指南       

                                                                  

编辑 

作用域                                                       功能                                                                          快捷键 

全局                                                           查找并替换                                                            Ctrl+F

全局                                                           查找                                                                         Ctrl+H 

文本编辑器                                               查找上一个                                                            Ctrl+Shift+K 

文本编辑器                                               查找下一个                                                            Ctrl+K  

全局                                                           撤销                                                                          Ctrl+Z 

全局                                                           复制                                                                           Ctrl+C 

全局                                                           恢复上一个选择                                                      Alt+Shift+↓ 

全局                                                           剪切                                                                         Ctrl+X 

全局                                                          快速修正                                                                  Ctrl1+1 

全局                                                         内容辅助(智能提示)                                              Alt+/ 

全局                                                         全部选中                                                                   Ctrl+A 

全局                                                         删除                                                                           Delete 

全局                                                        上下文信息                                                              Alt+Shift+? 

Java编辑器                                          显示工具提示描述                                                 F2 

Java编辑器                                            选择封装元素                                                           Alt+Shift+↑ 

Java编辑器                                            选择上一个元素                                                       Alt+Shift+← 

Java编辑器                                            选择下一个元素                                                       Alt+Shift+→ 

文本编辑器                                            增量查找                                                                   Ctrl+J 

文本编辑器                                            增量逆向查找                                                          Ctrl+Shift+J 

全局                                                        粘贴                                                                          Ctrl+V 

全局                                                        重做                                                                          Ctrl+Y

全局                                                       工作区最大化/最小化                                          Ctrl+M

全局                                                       重构                                                                         Shift+Alt+T

全局                                                       提取函数                                                                   Shift+Alt+M

全局                                                       重命名                                                                       Shift+Alt+R

全局                                                       更改函数标记                                                           Shift+Alt+C

 

查看 

作用域                     功能                          快捷键 

全局                       放大                          Ctrl+= 

全局                       缩小                          Ctrl+- 

 

窗口   

作用域                    功能                           快捷键 

全局                      激活编辑器                     F12 

全局                      切换编辑器                     Ctrl+Shift+W 

全局                      上一个编辑器                  Ctrl+Shift+F6 

全局                      上一个视图                    Ctrl+Shift+F7 

全局                      上一个透视图                  Ctrl+Shift+F8 

全局                      下一个编辑器                  Ctrl+F6 

全局                      下一个视图                    Ctrl+F7 

全局                      下一个透视图                  Ctrl+F8 

文本编辑器                显示标尺上下文菜单             Ctrl+W 

全局                      显示视图菜单                  Ctrl+F10 

全局                      显示系统菜单                   Alt+- 

 

导航 

作用域                    功能                           快捷键 

Java编辑器                打开结构                       Ctrl+F3 

全局                      打开类型                       Ctrl+Shift+T 

全局                      打开类型层次结构               F4 

全局                      打开声明                       F3 

全局                      打开外部javadoc                Shift+F2 

全局                      打开资源                       Ctrl+Shift+R 

全局                      后退历史记录                   Alt+← 

全局                      前进历史记录                   Alt+→ 

全局                      上一个                        Ctrl+, 

全局                      下一个                        Ctrl+. 

Java编辑器                显示大纲                       Ctrl+O 

全局                      在层次结构中打开类型           Ctrl+Shift+H 

全局                      转至匹配的括号                Ctrl+Shift+P 

全局                      转至上一个编辑位置             Ctrl+Q 

Java编辑器                转至上一个成员                 Ctrl+Shift+↑ 

Java编辑器                转至下一个成员                 Ctrl+Shift+↓ 

文本编辑器                转至行                         Ctrl+L 

  

搜索 

作用域                    功能                           快捷键 

全局                      出现在文件中                   Ctrl+Shift+U 

全局                      查找当前元素的声明             Ctrl+G 

全局                      查找当前元素的所有引用         Ctrl+Shift+G 

 

 

文本编辑 

作用域                    功能                           快捷键 

文本编辑器                改写切换                       Insert 

文本编辑器                上滚行                         Ctrl+↑ 

文本编辑器                下滚行                         Ctrl+↓ 

 

文件 

作用域                    功能                           快捷键 

全局                      保存                           Ctrl+S                   

全局                      打印                           Ctrl+P 

全局                      关闭                           Ctrl+F4 

全局                      全部保存                       Ctrl+Shift+S 

全局                      全部关闭                       Ctrl+Shift+F4 

全局                      属性                           Alt+Enter 

全局                      新建                           Ctrl+N 

 

项目 

作用域                    功能                           快捷键 

全局                      全部构建                      Ctrl+B 

 

源代码 

作用域                     功能                          快捷键 

Java编辑器                 代码自动对齐                  Ctrl+Shift+F 

Java编辑器                 取消注释                     Ctrl+ 

Java编辑器                 注释                         Ctrl+/

Java编辑器                 块注释/销注释                 Ctrl+Shift+/ Ctrl+Shift+\

Java编辑器                 添加导入(引入某个类(接口))  Ctrl+Shift+M 

Java编辑器                 组织导入                      Ctrl+Shift+O 

Java编辑器                 使用try/catch块来包围         未设置,太常用了,所以在这里列出,建议自己设置,也可以使用Ctrl+1自动修正。 

  

运行 

作用域                     功能                          快捷键 

全局                       单步返回                      F7 

全局                       单步跳过                      F6 

全局                       单步跳入                      F5 

全局                       单步跳入选择                  Ctrl+F5 

全局                       调试上次启动                  F11 

全局                       继续                          F8 

全局                       使用过滤器单步执行            Shift+F5 

全局                       添加/去除断点                 Ctrl+Shift+B 

全局                       显示                          Ctrl+D 

全局                       运行上次启动                  Ctrl+F11 

全局                       运行至行                      Ctrl+R 

全局                       执行                          Ctrl+U 

 

重构 

作用域                     功能                          快捷键 

全局                       撤销重构                      Alt+Shift+Z 

全局                       抽取方法                      Alt+Shift+M 

全局                       抽取局部变量                  Alt+Shift+L 

全局                       内联                          Alt+Shift+I 

全局                       移动                          Alt+Shift+V 

全局                       重命名                        Alt+Shift+R 

全局                       重做                          Alt+Shift+Y 

 

 

 

 



================================================================================================================

转自 http://mogoweb.net/archives/335


打造称手的开发工具-Eclipse篇


古人云,工欲善其事,必先利其器,孙悟空为了找到称手的兵器,苦苦寻觅,终于寻得定海神针一枚,打造出如意金箍棒,但有多少程序员能够静心专研手头的工具呢?从事软件开发多年,接触了各种各样的软件开发工具,远的不说,代码编辑工具就接触过不少,Turbo C/Visual Studio/C++ Builder/Source Insight/UltraEdit/Vim等,但都没有精通,更别说按照自己的喜好增加一些脚本/插件。转入Android开发后,又开始接触Eclipse,发现Eclipse真是个好东西。但要让自己运用的得心应手,还需要专研一些设置。本文就是记录一下我在开发过程中的一些Eclipse设置。

1. 过滤某些文件/文件夹

阅读android源码(C++)及chromium源码时,选择新建工程的选项: Makefile Project with Existing Code。众所周知,android和chromium的源码超级大,Eclipse打开这些大工程,在Refresh Workspace和Indexer时非常慢,而且极占CPU。通常情况下,我们可能只对其中的部分文件感兴趣,有必要进行一下过滤。Eclipse提供了Include Filter和Exclude Filter,顾名思义,Include Filter就是只包含满足条件的文件/文件夹,Exclude Filter则是排除满足条件的文件/文件夹。可以定义多个Filter。方法如下:

Project Explorer中,选定某个目录,点击右键,选择Properties,找到Resource Filters,点击Add…:


可以选择按Name/Project Relative Path/Location/Last Modified/File Length等等进行匹配,我一般使用Project Relative Path进行匹配。


2. 导入google c++编程风格

chromium C++代码采用的是google c++ code style。google c++编码规范被李开复称为最好的C++编程规范,有趣的可以到这里看看,条目非常多。

Eclipse也非常强大,可以支持不同的code style,而且这些style可以自定义,还可以导入/导出(需要注意的是,Eclipse的code style主要针对代码缩进/空格/括号位置,并不涉及变量命名等等)。google也提供了针对Eclipse的xml配置文件,我们只需导入到Eclipse即可,省去繁琐的配置。下面就说说导入方法。

  • http://google-styleguide.googlecode.com/svn/trunk/下载eclipse-cpp-google-style.xml
  • 打开Eclipse,选择Window | Preferences 菜单。
  • 在弹出对话框左边中选择C/C++ | Code Style。然后点击后侧的Import…按钮
  • 选择所下载的eclipse-cpp-google-style.xml文件,可以看到Select a profile下面的下拉框中多了Google C++选项。
  • 点击Apply按钮

3. 常用快捷键

CTRL+TAB 头文件和c/c++文件之间切换
CTRL+SHIFT+R 对话框中输入文件名(有联想功能),快速打开文件
CTRL+SHIFT+R 对话框中输入文件名(有联想功能),快速打开文件
CTRL+o 输入方法(函数)名,可快速定位到方法(函数)
CTRL+l 输入行号,快速定位到指定行
CTRL+h 打开文件搜索对话框


================================================================================================================================

eclipse+cdt+gcc编译选项控制

转自 http://hi.baidu.com/sfzhaoif/item/32ecf6bfe055b542bb0e1209


        如果我们的程序调用动态链接库,当在cdt中运行的时候,可以通过run-->enviroment-->添加LD_LIBRARY_PATH 环境变量来设置查找动态链接库文件的路径。但是在运行的时候,程序去那里找动态链接库呢?
        方法主要有两种。一种,是设置系统的LD_LIBRARY_PATH 环境变量(在eclipse里设置对外部正式运行的程序无效)。设置的方法见附录资料三
        另外一种,是将动态链接库文件的路径编译进二进制可执行文件。那么在eclipse如何进行编译呢?如下图


      好了,这下我们的程序就可以脱离eclipse运行了(,找了好久啊)。注意,不要设置错误了,是g++linker的miscellaneous。
      第二种方法的缺点是,库的地址就不能变动了(在游戏等应用程序中用这种方法教好)。第一种方法的优点是通过更改LD_LIBRARY_PATH的值,可以变动库文件的地址。它的缺点当然就是还要改动环境变量的值了。


---------------------------------------------------------可爱的分割线----------------------------------------------------------


(一)linux 动态库http://linux.chinaunix.net/bbs/archiver/?tid-974839.html
1. Linux下动态库使用小结
. 静态库和动态库的基本概念
静 态库,是在可执行程序连接时就已经加入到执行码中,在物理上成为执行程序的一部分;使用静态库编译的程序运行时无需该库文件支持,哪里都可以用,但是生成的可执行文件较大。动态库,是在可执行程序启动时加载到执行程序中,可以被多个可执行程序共享使用。使用动态库编译生成的程序相对较小,但运行时需要库文 件支持,如果机器里没有这些库文件就不能运行。


2. 如何使用动态库
如何程序在连接时使用了共享库,就必须在运行的时候能够找到共享库的位置。linux的可执行程序在执行的时候默认是先搜索/lib和/usr/lib这两个目录,然后按照 /etc/ld.so.conf里面的配置搜索绝对路径。同时,Linux也提供了环境变量LD_LIBRARY_PATH供用户选择使用,用户可以通过 设定它来查找除默认路径之外的其他路径,如查找/work/lib路径,你可以在/etc/rc.d/rc.local或其他系统启动后即可执行到的脚本添加如下语句:LD_LIBRARY_PATH =/work/lib:$(LD_LIBRARY_PATH)。并且LD_LIBRARY_PATH路径优先于系统默认路径之前查找(详细参考《使用LD_LIBRARY_PATH》)。
不过LD_LIBRARY_PATH的设定作用是全局的,过多的使用可能会影响到其他应用程序的运 行,所以多用在调试。(LD_LIBRARY_PATH的缺陷和使用准则,可以参考《Why
LD_LIBRARY_PATH is bad》 )。通常情况下推荐还是使用gcc的-R或-rpath选项来在编译时就指定库的查找路径,并且该库的路径信息保存在可执行文件中,运行时它会直接到该路径查找库,避免了使用LD_LIBRARY_PATH环境变量查找。


3.库的链接时路径和运行时路径
现代连 接器在处理动态库时将链接时路径(Link-time path)和运行时路径(Run-time path)分开,用户可以通过-L指定连接时库的路径,通过-R(或-rpath)指定程序运行时库的路径,大大提高了库应用的灵活性。比如我们做嵌入式移植时#arm-linux-gcc $(CFLAGS) –o target –L/work/lib/zlib/-llibz-1.2.3 (work/lib/zlib下是交叉编译好的zlib库),将target编译好后我们只要把zlib库拷贝到开发板的系统默认路径下即可。或者通过- rpath(或-R )、LD_LIBRARY_PATH指定查找路径。  


(二)如何使Linux启动之后就加载LD_LIBRARY_PATH的路径http://topic.csdn.net/t/20041020/10/3472713.html )


请问如何使Linux启动之后就加载LD_LIBRARY_PATH的路径!
是修改.bash_profile文件吗,我修改了但是启动Linux之后LD_LIBRARY_PATH的路径还是没有,运行程序时有些库文件加载不上!


1 楼winux0(随缘不变)
     记住最后要export LD_LIBRARY_PATHTop


楼bekars(涡轮增压:没有解决不了的问题,因为根本就没有问题)
     .bash_profile 

# Get the aliases and functions 
if [ -f ~/.bashrc ]; then 
. ~/.bashrc 
fi 

# User specific environment and startup programs 
PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin 
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 

export PATH 
export LD_LIBRARY_PATH 
unset USERNAME 

还是不行Top


 3 楼cheeralen(嵌入式)
       bash不会从profile文件里读取环境变量的 
       csh才会从profile文件里读取变量 
       所以你可以修改你的bash为csh!!!Top


4 楼bekars(涡轮增压:没有解决不了的问题,因为根本就没有问题)
       楼上的不太明白,能不能说多一些Top


5 楼winux0(随缘不变)
     应该不会吧,不然你的export的那些PATH也没有用哦Top


6 楼bekars(涡轮增压:没有解决不了的问题,因为根本就没有问题)回复于 2004-10-20 12:35:29 得分 0
     不知道,你可以帮我试试吗?我这里就是不行 

.bash_profile 

# Get the aliases and functions 
if [ -f ~/.bashrc ]; then 
. ~/.bashrc 
fi 

# User specific environment and startup programs 

PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin 
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 

export PATH 
export LD_LIBRARY_PATH 
unset USERNAME   


(三)使用LD_LIBRARY_PATH(  http://blog.chinaunix.net/u1/48140/showart_377250.html)

环境变量LD_LIBRARY_PATH用来指定查找共享库时除了默认路径之外的其他路径。(该路径在默认路径之前查找)
移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时我们可以设置LD_LIBRARY_PATH。
    例:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/work/lib/
这样就可以使用/work/lib/下的库文件了,运行程序后系统会自动到环境变量LD_LIBRARY_PATH指定的路径中查找其所需的库。


系统查找动态库的顺序
系统先找LD_LIBRARY_PATH下的库再找/lib and /usr/lib等路径下的库,还有/etc/ld.so.conf里指定的路径(如果ld.so.conf存在),man ldconfig for more information
使Linux启动之后就加载LD_LIBRARY_PATH的路径
/etc/rc.d/rc.local文件中加入export LD_LIBRARY_PATH="xxxxx"  即可.


如果在链接时使用了"-R"和"-L"选项,则相关动态库的路径将保存在ELF文件中,于是以后的运行中不再需要设置环境变量去定位动态库。比如,有一个 /usr/local/lib/libfoo.so,而你的bar程序需要这个libfoo.so,编译、链接时最好 这样 :gcc -Wall -pipe -O3 -o bar -R/usr/local/lib -L/usr/local/lib bar.c -lfoo
(#man gcc ,没发现-R或-rpath选项,待查)


===============================================================================================================

转自 http://hi.baidu.com/open_hard/item/8dd295db64d6c0ea54347f1b

Linux动态库(.so)搜索路径

众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库, 并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函 数,以及该动态库的其它资源了。在Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定。

方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径。

可以通过编辑配置文件/etc/ld.so.conf来指定动态库的搜索路径,该文件中每行为一个动态库搜索路径。每次编辑完该文件后,都必须运行命令ldconfig使修改后的配置生效。我们通过例1来说明该方法。

例1:

我们通过以下命令用源程序pos_conf.c(见程序1)来创建动态库 libpos.so,详细创建过程请参考文[1]。

# gcc -c pos_conf.c
         # gcc -shared -fPCI -o libpos.so pos_conf.o
         #

#include <stdio.h>
         void pos()
         {
                 printf("/root/test/conf/lib\n");
          }
          程序1: pos_conf.c

接着通过以下命令编译main.c(见程序2)生成目标程序pos。

# gcc -o pos main.c -L. -lpos
          #

void pos();
        int main()
        {
             pos();
              return 0;
         }
        程序2: main.c

然后把库文件移动到目录/root/test/conf/lib中。

# mkdir -p /root/test/conf/lib
         # mv libpos.so /root/test/conf/lib
          #

最后编辑配置文件/etc/ld.so.conf,在该文件中追加一行"/root/test/conf/lib"。

运行程序pos试试。

# ./pos
         ./pos: error while loading shared libraries: libpos.so: cannot open shared object file: No such file or directory
          #

出错了,系统未找到动态库libpos.so。找找原因,原来在编辑完配置文件/etc/ld.so.conf后,没有运行命令ldconfig,所以刚才的修改还未生效。我们运行ldconfig后再试试。

# ldconfig
         # ./pos
          /root/test/conf/lib 
           #

程序pos运行成功,并且打印出正确结果。

方法二:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。

通过设定环境变量LD_LIBRARY_PATH也可以指定动态库搜索路径。当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔。下面通过例2来说明本方法。

例2:

我们通过以下命令用源程序pos_env.c(见程序3)来创建动态库libpos.so。

# gcc -c pos_env.c
         # gcc -shared -fPCI -o libpos.so pos_env.o
          #

#include <stdio.h>
        void pos()
         {
               printf("/root/test/env/lib\n");
          }
        程序3: pos_env.c

测试用的可执行文件pos可以使用例1中的得到的目标程序pos,不需要再次编译。因为pos_conf.c中的函数pos和pos_env.c中的函数pos 函数原型一致,且动态库名相同,这就好比修改动态库pos后重新创建该库一样。这也是使用动态库的优点之一。

然后把动态库libpos.so移动到目录/root/test/conf/lib中。

# mkdir -p /root/test/env/lib
         # mv libpos.so /root/test/env/lib
          #

我们可以使用export来设置该环境变量,在设置该环境变量后所有的命令中,该环境变量都有效。

例如:

# export LD_LIBRARY_PATH=/root/test/env/lib
         #

但本文为了举例方便,使用另一种设置环境变量的方法,既在命令前加环境变量设置,该环境变量只对该命令有效,当该命令执行完成后,该环境变量就无效了。如下述命令:

# LD_LIBRARY_PATH=/root/test/env/lib ./pos
        /root/test/env/lib
         #

程序pos运行成功,并且打印的结果是"/root/test/env/lib",正是程序pos_env.c中的函数pos的运行结果。因此程序pos搜索到的动态库是/root/test/env/lib/libpos.so。

方法三:在编译目标代码时指定该程序的动态库搜索路径。

还可以在编译目标代码时指定程序的动态库搜索路径。这是通过gcc 的参数"-Wl,-rpath,"指定(如例3所示)。当指定多个动态库搜索路径时,路径之间用冒号":"分隔。

例3:

我们通过以下命令用源程序pos.c(见程序4)来创建动态库libpos.so。

# gcc -c pos.c
         # gcc -shared -fPCI -o libpos.so pos.o
          #

#include <stdio.h>
        void pos()
         {
               printf("./\n");
         }
         程序4: pos.c

因为我们需要在编译目标代码时指定可执行文件的动态库搜索路径,所以需要用gcc命令重新编译源程序main.c(见程序2)来生成可执行文件pos。

# gcc -o pos main.c -L. -lpos -Wl,-rpath,./
         #

再运行程序pos试试。

# ./pos
         ./
          #

程序pos运行成功,输出的结果正是pos.c中的函数pos的运行结果。因此程序pos搜索到的动态库是./libpos.so。

以上介绍了三种指定动态库搜索路径的方法,加上默认的动态库搜索路径/lib和/usr/lib,共五种动态库的搜索路径,那么它们搜索的先后顺序是什么呢?

在介绍上述三种方法时,分别创建了动态库./libpos.so、 /root/test/env/lib/libpos.so和/root/test/conf/lib/libpos.so。我们再用源程序 pos_lib.c(见程序5)来创建动态库/lib/libpos.so,用源程序pos_usrlib.c(见程序6)来创建动态库 /usr/lib/libpos.so。

#include <stdio.h>
         void pos()
          {
                 printf("/lib\n");
           }
          程序5: pos_lib.c

#include <stdio.h>
        void pos()
         {
                printf("/usr/lib\n");
         }
        程序6: pos_usrlib.c

这样我们得到五个动态库libpos.so,这些动态库的名字相同,且都包含相同函数原型 的公用函数pos。但存储的位置不同和公用函数pos 打印的结果不同。每个动态库中的公用函数pos都输出该动态库所存放的位置。这样我们可以通过执行例3中的可执行文件pos得到的结果不同获知其搜索到了 哪个动态库,从而获得第1个动态库搜索顺序,然后删除该动态库,再执行程序pos,获得第2个动态库搜索路径,再删除第2个被搜索到的动态库,如此往复, 将可得到Linux搜索动态库的先后顺序。程序pos执行的输出结果和搜索到的动态库的对应关系如表1所示:

创建各个动态库,并放置在相应的目录中。测试环境就准备好了。执行程序pos,并在该命令行中设置环境变量LD_LIBRARY_PATH。

# LD_LIBRARY_PATH=/root/test/env/lib ./pos
          ./
          #

根据程序pos的输出结果可知,最先搜索的是编译目标代码时指定的动态库搜索路径。然后我们把动态库./libpos.so删除了,再运行上述命令试试。

# rm libpos.so
        rm: remove regular file `libpos.so'? y
        # LD_LIBRARY_PATH=/root/test/env/lib ./pos
        /root/test/env/lib
        #

根据程序pos的输出结果可知,第2个动态库搜索的路径是环境变量LD_LIBRARY_PATH指定的。我们再把/root/test/env/lib/libpos.so删除,运行上述命令。

# rm /root/test/env/lib/libpos.so
         rm: remove regular file `/root/test/env/lib/libpos.so'? y
        # LD_LIBRARY_PATH=/root/test/env/lib ./pos
        /root/test/conf/lib
        #

第3个动态库的搜索路径是配置文件/etc/ld.so.conf指定的路径。删除动态库/root/test/conf/lib/libpos.so后再运行上述命令。

# rm /root/test/conf/lib/libpos.so
        rm: remove regular file `/root/test/conf/lib/libpos.so'? y
        # LD_LIBRARY_PATH=/root/test/env/lib ./pos
        /lib
        #

第4个动态库的搜索路径是默认搜索路径/lib。我们再删除动态库/lib/libpos.so,运行上述命令。

# rm /lib/libpos.so
        rm: remove regular file `/lib/libpos.so'? y
        # LD_LIBRARY_PATH=/root/test/env/lib ./pos
        /usr/lib
        #

最后的动态库搜索路径是默认搜索路径/usr/lib。

综合以上结果可知,动态库的搜索路径搜索的先后顺序是:

1.编译目标代码时指定的动态库搜索路径;

2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;

3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;

4.默认的动态库搜索路径/lib;

5.默认的动态库搜索路径/usr/lib。

在上述1、2、3指定动态库搜索路径时,都可指定多个动态库搜索路径,其搜索的先后顺序是按指定路径的先后顺序搜索的。对此本文不再举例说明,有兴趣的读者可以参照本文的方法验证。




--------------------------------------------------------------------------------------------------------------------------


eclipse 中文注释的乱码问题解决方案


转自 http://blog.csdn.net/lqg1122/article/details/7274949


使用eclipse导入项目或从svn服务器检出项目的时候有时候会出现中文注释乱码的现象,如下图所示:


这种情况下,我们可以做两个设置把乱码干掉:

1.在工程名上右击--属性--Resoure,把Text files encoding改为 GBK 。


2.windows--preferences--General--Content Types--text--java source file,

查看默认编码(default encoding)是不是GBK,不是就修改为GBK,然后Update。


这样设置好之后乱码问题就解决了。。。。。




----------------------------------------------------------------------------------------------------------------------------------


在WINDOWS上利用ECLIPSE CDT交叉编译C/C++程序 FOR LINUX

转自 http://www.gouplus.com/index.php/2010/06/03/windows-eclipse-cdt-crosscompile-for-linux/


前几天有空研究了一下交叉编译, 随经历了一些曲折,但最后还是成功了.

考虑到以后有可能在linux下用C/C++开发程序, 有想试试交叉编译. 在windows下面用Eclipse CDT + Subversion+Cygwin + crosstool-linux 试验一下。

具体步骤如下:

1. Eclipse CDT

直接在eclipse.org下载打包好的CDT包,解压释放即可

2 . Subversion 插件

直接使用Subclipse,将update地址加到eclipse一路OK即可:http://subclipse.tigris.org/update_1.6.x

在Eclipse->Windows->Preferences    Team下面看到SVN即安装成功。这时可以对SVN进行配置,如SVN代码库位置等,用户名,密码等。(我之前已经将apache和Subversion的连接建立好了,网上的教程挺多我就不再说明)

然后再File->New->Other->SVN->从SVN检出项目 就大功告成。

3. Cygwin 安装

将安装好的Cygwin bin路径加到环境变量PATH即可 C:\Cygwin\bin

4.建立新C/C++项目

一个简单的helloworld 通过!

5. cross compiler

目前的helloworld 可以在windows上编译,也只能在windows上运行!这下就要用到crosstool了。

crosstool是专门用来从源代码编译编译器的, 如gcc

网上已经有些文章讲述crosstool的使用:这是一个有用的链接:

http://metamod-p.sourceforge.net/cross-compiling.on.windows.for.linux.html

不过上面的cross-compiler包太旧了,导致我编译出的elf在linux下报错:

找不到 libstd++.so.5

用ldd看,果然链接到了libstd++.so.5, 而我的virtualbox中安装的是Redhat Enterprise 5, 上面只有libstd++.so.6.

后来在sourceforge上找到最新的包cygwin-gcc-linux-gcc-4.1.1-glibc-2.3.6-tls.tar,编译成功。 

7. Makefile

 默认情况下,Makefile是使用g++/gcc编译的,我在Makefile的顶端定义了

CC=gcc-linux

CXX=g++-linux

这样Cygwin就调用新的编译器进行编译了。

总结:虽然编译成功了,但对于在实际项目中采用这种方式还有些担忧。也许在linux下面直接用Eclipse CDT开发是更好的选择,虽然我一直用VI,但这个效率是在是不敢恭维:)

接下来我会尝试多几个常用库的编译和集成和部署。 有没有可能用maven2+hudson实现cross-compile的CPP项目更多的自动化呢?




---------------------------------------------------------------------------------------------------------------------------------



Windows下用Eclipse搭建C/C++开发环境


转自 http://metaphy.iteye.com/blog/560534


本文假定你已经熟悉Java,Eclipse的安装,并能顺利启动和运行Eclipse.此外因为各软件版本在不断更新,有些地方可能不准确,以最新的、原文资料为准。 

距上一次写和调C++程序,已经5、6年了,光阴荏苒岁月无情,现在再重新拾起来,很多东西都要从头来。Windows下C/C++的IDE有很多,我知道的就有MS Visual Studio,Borland C++等,但这些是要版权的。不要钱也有一些,但因为对Eclipse太熟了,所以就选下面要讲的Eclipse + GNU toolchain(话说toolchain这个词很形象). 

1. 首先下载Eclipse for C++, 最新版是基于Eclipse 3.5.1的,叫做galileo(伽利略),上个版本3.4貌似叫做ganymede(木卫三)。下载地址:http://eclipse.org/downloads/,选择32bit for windows,文件名叫 eclipse-cpp-galileo-SR1-win32.zip 



2. 解压,直接运行。注意,至少JDK你已经安装了(我用的是JDK1.6)。运行后一个灰蓝色的welcome页面出现,进入Tutorials。学东西先读Tutorial是个好习惯。 

3. 首先了解一下什么是CDT,就是 C/C++ Development Toolkit,bulabula... 然后它说,这个东西没包含C/C++的编译器、调试器,你得自己弄。 

4. 那就继续看。Windows下,MinGW和Cygwin 是获取GNU toolchain的2种主要方式(GNU toolchain,GNU下一系列的工具包,我的理解主要是gcc这一系列工具)。这两者最大的区别是MinGW使用Windows C的运行库,叫做mscvrt,而Cygwin使用了一组基于GPL的DLLs(GPL协议具有传染性,使用GPL协议下的软件后你自己开发的东西也要遵守GPL协议),因此MinGW避开了GPL协议。 

5. MinGW和CDT能很好的整合。好吧,我们装MinGW(MinGW是Minimal GNU for Windows的意思,这个下载过程相当慢,我下了大半个小时)。当前版本是MinGW-5.1.6.exe,我一股脑来了个Full install。装完后才发现这么一句:Do not install the MinGW Make feature as the MSYS version of make from step 5 is a more complete implementation of make.(不要安装MinGW的Make, 第5步的MSYS是个更好的实现方案) 

6. 为了避免将来可能遇到的问题,卸了重装。这里是完整的安装步骤: 
1)下载MinGW,地址 http://sourceforge.net/projects/mingw/files/ 
2)安装MinGW base tool和g++编译器(不要安装Make);我把除了Make之外的都装了,里面居然还有个Ada的编译器 


3)当前版本(它是指MinGW-5.1.3,不过我下的5.1.6同样也没有)没有装gdb debugger, 下载它:http://downloads.sourceforge.net/mingw/gdb-6.6.tar.bz2 
4)解压gdb-6.6.tar.bz2 到你安装MinGW的地方,gdb-6.6/下也有一系列bin,inclue文件夹,直接拷到MinGW下面覆盖进去即可 
5)如果要用Makefile,请下载 MSYS-1.0.10.exe,MSYS是make及命令行的一个实现。嗯,要用。下载地址 http://downloads.sourceforge.net/mingw/MSYS-1.0.10.exe 
安装界面是个命令界面,写2个”y”,然后告知MinGW的安装路径即可。 


OK,安装部分就完成了。下面写2个小例子。 

7. 首先创建一个简单的HelloWorld C++工程,这个很简单,按Wizard向导建一个模板即可。 


Run的时候选Run Configurations, 然后双击C/C++ application建一个新的run configuration就行。 


8. 下面建一个Makefile类型的工程。选择New C++ Project -> Makefile project -> Empty Project, 我们建一个空的项目,建完后里面什么也没有(除了2个.project文件),这时,我们要建一个源文件和一个make文件:main.cpp 和 makefile,如下,都建到根目录下: 
 

C++代码   收藏代码
  1. /* 
  2.  * main.cpp 
  3.  */  
  4.   
  5. #include <iostream>  
  6. using namespace std;  
  7.   
  8. int main () {  
  9.     // Say Hello five times  
  10.     for (int index = 0; index < 5; ++index)  
  11.       cout << "HelloWorld!" << endl;  
  12.     char input = 'i';  
  13.     cout << "To exit, press 'm'" << endl;  
  14.     while(input != 'm') {  
  15.         cin  >> input;  
  16.         cout << "You just entered " << input  
  17.              << " you need to enter m to exit." << endl;  
  18.     }  
  19.     exit(0);  
  20. }  

Makefile代码   收藏代码
  1. all: hello.exe  
  2.   
  3. clean:  
  4.     rm main.o hello.exe  
  5.   
  6. hello.exe: main.o  
  7.     g++ -g -o hello main.o  
  8.   
  9. main.o:  
  10.     g++ -c -g main.cpp  

注意,makefile里的行首缩进用的是Tab而不是空格。如果编译时提示 No separator...就是这里有问题。  

9. Ok, 选中工程,点Build(或点那个小锤子),你会发现这个错误:(Cannot run program "make": Launching failed),啊,我们的make.exe还没设。选中工程,直接Alt-Enter到工程属性页,把msys的bin加到Path里。 
 

10. 重新build, 大功告成。




-------------------------------------------------------------------------------------------------------------------------------


用Eclipse CDT开发ARM Linux程序


转自 http://www.linuxidc.com/Linux/2011-05/35971.htm


在windows下用eclipse开发linux应用程序。呵呵 是有点奇怪。

当然在linux下用eclipse开发更没有问题了。

1 安装编译工具。从sourcery网站下载SourceryG++lite 2009q1-203版本。该版本是用于开发linux程序的。而eabi版本是用于开发freertos之类非linux应用的。

2 从eclipse网站下载cdt包,要5.x版本的。就是ganymede版本。

3 安装eclipse的gnu arm 插件。

下载见Linux公社的1号FTP服务器里,下载地址:

FTP地址:ftp://www.linuxidc.com

用户名:www.linuxidc.com

密码:www.muu.cc

在 2011年LinuxIDC.com\5月\用Eclipse CDT开发ARM Linux程序 

下载方法见 http://www.linuxidc.net/thread-1187-1-1.html

试验了Ubuntu和Windows XP环境。都没有问题。

Windows XP下建立工程文件时要稍微注意以下:不要选择show project types ans toolchains ..., 然后选择ARM Linux GCC(Sourcery G++ Lite)




----------------------------------------------------------------------------------------------------------------------


如何使用eclipse进行嵌入式Linux的开发


转自 http://www.embedu.org/Column/Column26.htm


作者:曾宏安,华清远见嵌入式学院高级讲师。

如何使用eclipse进行嵌入式Linux的开发 习惯了在windows环境下开发的程序员在转到Linux平台时经常会抱怨没有一个好用的集成开发环境。和windows下常用的一些开发软件相比,Linux自带的一些开发环境使用起来要么界面和操作不够方便、友好,要么功能不全。其实我们完全可以在开源社区上找到操作方便,功能强大的开发环境。下面就向大家介绍一个能在Linux上运行,界面和功能与windows上同类软件相似的开发平台eclipse。

eclipse是著名的跨平台的集成开发环境(IDE),最初是由IBM公司开发的替代商业软件Visual Age For Jave的下一代开发环境。2001年,IBM将eclipse贡献给开源社区,现在由eclipse基金会管理。2005年7月,eclipse稳定版3.1.0发布,目前最新的稳定版本是3.4。

eclipse本身只是一个框架平台,最初主要用于java语言的开发。但是众多插件的支持使得eclipse同样可以用来开发其他的语言,如c/c++、c#、perl、cobol的等等。cdt(c/c++ development toolkit)就是支持c/c++开发的插件。许多软件开发商也以eclipse为框架推出了自己的集成开发环境。由于eclipse平台用java实现,所以运行时需要jre(java runtime environment)的支持。下面我们以ubuntu(linux发行版的一种)为例,介绍如何在linux上使用 eclipse+cdt来进行嵌入式Linux应用程序的开发。

一、安装软件

在ubuntu下安装软件有两种方法:使用apt-get来自动安装或手动安装。用户使用自动安装非常方便,适合初学者。但是安装过程过于依赖资源网站的连接状况,可能需要耗费过多的时间。这里我们推荐手动安装的方式,花的时间比较短。

1、安装jdk

jdk(java development kit)即java开发包,其中包含了运行eclipse所需要的jre. ubuntu缺省安装的gnu版本的jre运行效率不高,所以我们需要安装sun公司的jre. 首先从sun的网站上(http://java.sun.com/javase/downloads/index.jsp)下载安装包jdk-6u7-linux-i586.bin,然后如下进行安装:

# mkdir -p /opt/java 
        # ./jdk-6u7-linux-i586.bin // 执行自解压文件,生成目录
        # mv jdk1.6.0_07 /opt/java // 把目录移到/opt/java下
        # cd /opt/java
        # ln -s jdk1.6.0_07 jdk 
        # mv /etc/alternatives/java /etc/alternatives/java.gnu
        # ln -s /opt/java/jdk/bin/java /etc/alternatives/java
        # export JAVA_HOME=/opt/java/jdk // 设置环境变量

2、安装eclipse和cdt

从eclipse网站上(http://www.eclipse.org/)下载安装包eclipse-SDK-3.4-linux-gtk.tar.gz 和cdt-master-5.0.0.zip

# cd /opt
        # tar zxvf eclipse-SDK-3.4-linux-gtk.tar.gz // 解压生成eclipse目录
        # export PATH=/opt/eclipse:$PATH
        # mkdir -p /opt/cdt
        # cd /opt/cdt
        # unzip cdt-master-5.0.0.zip
        # cp -r plugins/* /opt/eclipse/plugins/
        # cp -r features/* /opt/eclipse/features/

二、创建c/c++工程

假设我们已经在linux上安装好了arm交叉工具链,下面介绍如何创建、交叉编译和调试c/c++工程。为了更直观的说明,我们截取了相关的图片:

进入eclipse安装路径后,运行eclipse


eclipse运行界面


创建c 工程


使用缺省的Linux GCC工具链


进入c/c++ 界面


添加源代码文件1


添加源代码文件2


编辑代码


设置工程属性,指定交叉工具链1


设置工程属性,指定交叉工具链2


设置工程属性,指定交叉工具链3


编译工程


已生成arm平台可执行代码


配置调试选项


设置Debugger和 GDB debugger选项


设置连接类型为TCP,目标板的ip地址和调试端口号。端口号任意指定,通常大于1024(避免和系统所用端口号冲突)


在开发板上运行程序,格式如上图所示:gdbserver是交叉调试辅助程序;192.168.0.150是主机的ip地址;1234是调试端口号,和eclipse调试选项里设定的端口号要一致


点击Debug,进入调试界面


执行到断点

eclipse的调试界面和操作和在windows下开发类似,相信到了这一步,大家已经可以很方便来进行应用程序的开发了。




--------------------------------------------------------------------------------------------------------------------------------------------


Eclipse中cvs的使用介绍[附图]


转自 http://www.gispark.com/html/programme/2007/0603/1178.html


Eclipse中cvs的使用介绍[附图]:

很多时候我们在做项目开发时,会用到cvs,现在我给大家介绍一下关于eclipse下怎么使用cvs管理功能,eclipse本身是自带cvs的,我们只要简单设置一下让它连接到cvs服务器上。
    看下图

点击cvs的图标出现此画面后,在空白处点击右键就可以,新建一个资源库位置,如下图

输入完信息后,点击完成,就建立好了,跟cvs服务器的连接,下面我们打开cvs服务器上的目录

对于cvs服务器上的目录,我们可以检出,一种是检出为项目,就会将目录检出在eclipse中自动生成一个项目,
也可以将某个目录检出到任何一个项目中即〔检出到〕这个功能,需要注意的是只有检出的文件,在修改后才可以提交。下面看对文件的操作:


对于文件来说,我们最常用的就是比较cvs中各个版本文件的区别,方便我们查找更新有没有问题,点击任何一个文件点击右键就可看到上面的图片,然后我们使用在资源历史记录中显示,看到下图:

我们按住ctrl键点击鼠标选择两个版本的文件,然后点击鼠标右键,点击比较就可以比较这个文件这两个版本之间的差异了。

下面我们看看怎么样来更新cvs服务器上的文件,前面已经讲了,只有从cvs服务器中检出的文件才可以更新和提交,看下图

在 项目中选中任何一个检出的文件,点击鼠标右键,选择小组,就可以看到提交和更新等很多功能。你只要更改好后,点击提交就可提交到cvs服务器中,点击更新 是从cvs服务器中取文件更新本地文件,这里需要注意的是,当我们建立的项目是源代码文件和编译好的类文件是不同目录的时候,是不能传类文件,传的话会导 致cvs服务器上的文件出问题,只能将类文件单独复制到专门用来上传的目录上传,因为项目在编译的时候会将原文件下的cvs目录也编译到类文件下,所以会 导致这个问题。 
下面顺便说一个eclipse本地文件的一个历史记录的功能,看到上图中的比较和替换为,就是eclipse一个本地的历史记录功能,帮助你可以恢复以前或者跟以前的文件比较的功能。看下图
相信大家一看就会明白这个功能。
关于eclipse+cvs的基本功能使用其实很简单,大家试一下就知道,我在项目中用得最多的都是它的比较功能,对于文件上传我还是用cvs的客户端程序,因为源代码目录和类文件目录不同,所以这样比较安全,希望
这些能对各位使用eclipse中的cvs有所帮助。如有问题欢迎指出。
                                                --大肚翁    
                                                              2004.10.9 
织梦内容管理系统

         在第一部分中讲述了一个问题,关于 项目在编译的时候会将原文件下的cvs目录也编译到类文件下,所以会导致上传类文件出问题。经过这两天的研究发现这个问题是可以解决的。方法如下:
点击窗口下的首选项看到下图:

按图上所说的,已过滤CVS目录,还有就是去掉完全构建时清空文件夹,这样的话在编译文件是就不会将类文件所在的文件夹中的cvs目录删除。做好这两部就可以解决问题了。

      我们在多人进行一个项目进行开发时,通常会碰到一个问题就是两个人从cvs服务器上同时下载了同一个文件,进行修改,当一个人先提交而另一个人后提交时通 常就将前一个人修改的覆盖掉了,我们看看eclipse中的cvs是怎样处理这个问题的,首先我们从cvs中检出一个目录为项目为test然后打开一个文 件test1.txt文件在文件中加了adc如下图:


然后我们用cvs的客户端程序下载同一个test目录,然后在test1.txt文件中增加bbb,这样相当于两个人同时修改了同一个文件,我们先提交一个。如下图:


然后在eclipse中提交同样的文件test1.txt,如下图



会出现一个错误:

这个错误表明了你的提交文件失败了,我再使用另外一个功能,就是与资源库同步功能,在前一张图中可以看到,点击资源库同步后看到下图:图中有相应的说明

这样你就可以知道第一个更新修改了哪里,更重要是你也可以覆盖提交,或者覆盖更新本地的文件,看下图:







------------------------------------------------------------------------------------------------------------------------------


转自 http://www.linuxidc.com/Linux/2011-06/37587.htm

Eclipse+CDT+Cygwin配置C/C++开发环境



1.下载cygwin,默认的情况下Cygwin没有选择C++开发所需要的包,在安装时需要选中 :

gcc,
gcc-core,
gcc-g++,
gcc-mingw-core,
gcc-mingw-g++,
make ,
gdb,
binutils

可以参考:http://www.linuxidc.com/Linux/2011-06/37588.htm

2. 安装好后,需要把Cygwin加入Windows环境变量. 

因为gcc 和g++ 不能从windows cmd中直接执行, 可以通过直接在cmd中直接运行g++, gcc, 显示“访问被拒绝” (access denied), 
进入cygwin安装目录\bin下检查g++.exe, gcc.exe是否只有1k大小,如果是,那么文件是符号链接,那么把文件重命名一下(备份)。 
然后把g++-3.exe(或者g++-4.exe)拷贝一份,重命名为g++.exe。 把gcc-3.exe拷贝一份,重命名为gcc.exe。 

将cygwin安装目录\bin加入到环境变量PATH中。好了,开个cmd命令行窗口,分别试一下gcc -v , make -v 命令。 

3.下载Eclipse CDT插件

地址:http://www.eclipse.org/cdt/downloads.php

4. 配置路径映射

eclipse中调试时,由于GDB使用的unix格式的路径,而eclipse使用的是windows路径,导致找不到匹配的代码, 
需要手工设置: 
In Eclipse in Preferences->C/C++->Debug->"Common Source Lookup Path" add new "Path Mapping".

把linux的路径映射到windows的路径:

比如  /cygwin/c   映射成 C:\ 

5.选中编译器

在C++项目右键Properties->C/C++ Build->toolchain 中确定

Current toolchain = Cygwin Gcc,

Current builder = Gnu Make Builder,

Used tools 有:

GCC Assembler,

GCC Archiver,

Cywgin C++ Compiler,

Cywgin C Compiler,

Cywgin C Linker,

Cywgin C++ Linker。

最后将Display compatible toolchains only选中。


注:如果在Current toolchai选项中没有 Cygwin GCC选项,需要点击上面Configuration右边的Manage Configuration -> New -> Import predefined - > (Excutable -> Cygwin GCC)

6. 创建一个新cpp项目






第一个cpp编译成功!















  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:程序猿惹谁了 设计师:我叫白小胖 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值