首页 > 电脑 > 电脑教程

Ecplise编译Cygwin环境、使用CDT插件开发CC++

电脑教程 2026-05-21 菜科探索 +
简介:借助Ecplise的强大功能,我们可以通过给Ecplise增加CDT插件来开发C/C++程序,下面是我配置CDT插件的总结过程,主要为了方便以后练习一些Demo

【菜科解读】

借助Ecplise的强大功能,我们可以通过给Ecplise增加CDT插件来开发C/C++程序,下面是我配置CDT插件的总结过程,主要为了方便以后练习一些Demo程序时使用。

编译环境采用的是Cygwin。

使用Ecplise4.2 + CDT8.1.2 +Cygwin2.774。

建议先阅读第6条的注意事项。

强烈介意:先安装配置cygwin再安装cdt插件

一、具体安装步骤

为了保证安装顺利,请按以下步骤来进行。

1、安装Cygwin

下载地址:http://cygwin.com/setup.exe官网:http://cygwin.com/

下载好后,点击setup.exe进行安装,出现如下图所示界面

点击“NEXT”后我们看到如下界面:

我们看到有三种安装模式:

Install from Internet,这种模式直接从Internet安装,适合网速较快的情况;

Download Without Installing,这种模式只从网上下载Cygwin的组件包,但不安装;

Install from Local Directory,这种模式与上面第二种模式对应,当你的Cygwin组件包已经下载到本地,则可以使用此模式从本地安装Cygwin。

从上述三种模式中选择适合你的安装模式,这里我们选择第一种安装模式,直接从网上安装,当然在下载的同时,Cygwin组件也保存到了本地,以便以后能够再次安装。

选中后,点击“下一步”。

这一步选择Cygwin的安装目录,以及一些参数的设置。

默认的安装位置是C:\cygwin\,你也可以选择自己的安装目录,然后选择“下一步”,

这一步我们可以选择安装过程中从网上下载的Cygwin组件包的保存位置,选择完以后,点击“下一步”,

这一步选择连接的方式,选择你的连接方式,然后点击下一步,会出现选择下载站点的对话框,如下图所示,

此步选择第一个163提供的镜像网站就可以,国内下载速度挺快,如果有其他镜像,可以输入URL后,点击“Add”进行添加,然后再在列表中选中。

选择完成后,点击“下一步”,进过下载几个文件后显示如下界面

下面就在这个界面中下载我们需要编译C/C++代码的Packages,我们只需要下载“Devel”分支下几个包就可以了,

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

在上图的search框中输入gcc,程序会自动进行搜索,如下图,通过选择“Devel”分支下的包,找到安装我们需要的包,然后点击Skip来选择最新的安装包

这是已经成功安装最新版本包后的图示,大家单击“Skip”来选择最新版本的安装。

同理,输入“make”后,选择“Devel”分支下的包,下载如图所示的包:

输入“gdb”后,选择“Devel”分支下的包,下载如图所示的包:

输入“binutils”后,选择“Devel”分支下的包,下载如图所示的包:

选完以后,我们选择下一步,进入安装过程,如下图所示,

安装的时间依据你选择的组件以及网络情况而定。

安装完成后,安装程序会提示是否在桌面上创建Cygwin图标等,点击完成退出安装程序。

2、配置Windows的环境变量

熟悉Java开发环境的都应该知道怎么找到环境变量,实在不知道的去百度下吧。

将cygwin\bin目录加入到环境变量PATH中。

然后,打开cmd命令行窗口,分别试一下gcc , g++命令。

如果显示“访问被拒绝” (access denied), 进入cygwin安装目录\bin下检查g++.exe, gcc.exe是否只有1k大小,如果是,那么文件是符号链接,那么把文件重命名一下(备份)。

然后把g++-3.exe(或者g++-4.exe)拷贝一份,重命名为g++.exe。

把gcc-3.exe拷贝一份,重命名为gcc.exe。

3、下载Ecplise CDT插件

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

参考:Ecplise插件的安装的四种方法。

或者通过Ecplise自动升级功能进行安装,如下图所示:

添加地址:http://download.eclipse.org/tools/cdt/releases/juno

4、配置Ecplise的C/C++开发环境

(1)设置Ecplise与Cygwin的路径映射

按以下步骤打开Ecplise:

Window -> Preferences->C/C++->Debug-> Common Source Lookup Path -> add -> new "Path Mapping".

映射方法,如下图:

eclipse中调试时,由于GDB使用的unix格式的路径,而eclipse使用的是windows路径,导致找不到匹配的代码, 把linux的路径映射windows的路径:比如 /cygwin/c 映射成 C:\ 。

(2)配置C/C++的"Makefile Project",选择“PE Windows Parser", 和”Cygwin PE Parser" 两项。

5、在Ecplise中创建工程编写C/C++代码

(1)创建C/C++工程

点击”Next“,显示如下图:

点击”Next“,显示如下图:

点击”Finish“完成创建。

当编写好代码后,可以对你的工程进行编译,点击“Project”选项下的"Builder Project"项目即可。

编译后的工程,如下图所示:

此时是成功编译后“Consloe”控制台的显示画面。

点击上面选中的,然后点击鼠标右键,选择“Run”,即可运行程序。

此时控制台即可打印出文字了。

到此我们就完成了Ecplise + CDT + Cygwin开发环境的配置,以后你就可以享用其方便的功能了。

6、常见问题

1、Eclipse下的CDT创建C++项目时候,不能自动生成includes文件夹

有两种解决方法:

(1)打开Window -> Preferences->C/C++->Environment,如下图所示,添加两个环境变量

将C_INCLUDE_PATH 设为 /usr/include将CPLUS_INCLUDE_PATH 设为 /usr/include/c++

如果在Cygwin的/usr/include/目录下没有c++这个目录,可以从\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++拷贝一个到目录下,或者直接添加这个目录都可以。

此步也可以解决代码中提示的显示信息”Unresolved inclusion:“问题,尽管不影响编译,只是无法定位头文件中的符号。

(2)在Windows里面,加入环境变量CPLUS_INCLUDE_PATH 和C_INCLUDE_PATH,并都设置成,安装的Cygwin的对应lib路径:D:\cygwin\lib然后再新建C/C++项目的时候,就可以自动生产Includes文件夹了。

2、用eclipse 建立编译C++工程出现错误提示 “symbol could not be resolved”

问题原因:是debug下的source lookup path没有映射正确。

解决办法:

window -> preferences -> C/C++ -> debug -> source lookup path > Path Mapping\cygdirve\c C:\

用cygwin下的c盘来替代当前的C盘 来查找需要的库文件,如果你的Cygwin安装在C盘,则映射C盘,如果安装在D盘,则映射为\cygdirve\d D:\,其他盘同理。

3、用eclipse 建立编译C++Debug工程出现错误提示以下错误

依然是上面映射的问题,打开Cygwin自带的“Cygwin Terminal”,然后输入以下命令“mount”如图所示:

上面就是我们设置的映射,如果没有你的Ecplise的Workspace所在的盘的位置的映射,请按照上面的说明进行添加,即可调试成功。

例如,我的Workspace在D:盘下,则我想调试程序,必须映射到D盘的位置。

4、解决Eclipse的CDT编写的c/c++程序的运行结果不能输出到console的问题

(1)设置“Debug Configurations"里的“Environment”选项,添加PATH,指定X:\cygwin\bin的路径。

如图所示

(2)如果build不能通过

(编译正常通过后会出现类似下面的输出)**** Build of configuration Debug for project Test ****make allmake: Nothing to be done for `all'.**** Build Finished ****请按照上面步骤重新安装。

Ecplise,编译,Cygwin,环境,、,使用,CDT,

新手初学JAVA,动手编译、运行Java程序

本人初学Java,看到别人都说学Java先不要用eclipse、NetBeans这些开发工具,所以索性就自己试试。

过程犯的错误极多,参照着李刚老师那本疯狂Java一点一点的实验.由于自己使用过Makefile,所以就用Makefile做了实验,总算是可以不用Eclipse、NetBeans就能自己编译运行一些小的程序了,下面就是我自己总结的心得,如有错误,请大家指正,谢谢。

本文分四小节:第一节:配置Java运行时环境第二节:代码的编译以及运行第三节:如何打jar包以及使用jar包第四节:利用Makefile自动编译运行Java程序第一节:配置Java运行时环境本节以Windows XP为例,来配置Java运行环境。

这节很简单,我就长话短说。

1:下载JDK开发包,解压安装。

2:在用户环境变量中增加PATH变量(在系统的环境变量中增加也行,但是可能需要重新启动操作系统),并设置其值。

例如我把JDK安装在F:\program\java目录下,则把PATH变量设置成F:\program\java\jdk\bin,因为这个路径下有我们要编译、运行Java程序所需要的所有工具,比如javac.exe,java.exe,jar.exe....。

之后我们就可以在cmd下使用javac、java、jar等命令了。

例如有一下Java源文件Test.java,执行javac Test.java就会在当前目录下生成Test.class文件。

之后我们运行java Test即可运行程序。

当然也可以人为指定class文件的生成位置,利用-d选项。

比如 javac -d D:\ Test.java,那么就可以在D:\目录下看到Test.class了。

第二节:代码的编译以及运行对于写Java程序而言,我们主张源文件与class文件都有相同的目录结构,这样不仅会方便代码的组织管理,也使得在编译以及运行Java程序时少犯错误。

1:位于默认包下的文件的编译以及运行//D:\src\A.javaclass A{ private int value; public A(){ value = 0; } public void setValue(int var){ value = var; } public int getValue(){ return value; }}//D:\src\Test.javapublic class Test{ public void static void main(String[] args){ A a = new A(); a.setValue(10); System.out.println(a.getValue()); }}我们运行javac Test.java,会发现D:\src目录下多了A.class和Test.class两个文件。

运行java Test则可以在Dos中看到输出为10。

我们发现这两个Java文件中并没有package语句,所以这两个文件同属于一个默认包中(没有显示写package的文件都是属于默认包的)。

2: Java类发现规则要想成功编译java文件,需要有classpath和包名的共同配合。

类发现规则:class文件所在目录 = classpath + \ + 包名中的 . 全变成 \ 这个规则大家一定要记住,保证万事OK!Java就是靠这个规则来寻找需要的class文件的。

例如:classpath=D://D:\src\A.javapackage src;public class A{ private int value; public A(){ value = 0; } public void setValue(int var){ value = var; } public int getValue(){ return value; }}//D:\Test.javaimport src.*;public class Test{ public void static void main(String[] args){ A a = new A(); a.setValue(10); System.out.println(a.getValue()); }}如果想要javac Test.java成功,则需要在D:\src(D:\src = D:\ + src)路径下能够找到A.class,否则编译出错。

如果不存在D:\src目录,则会返回包名不存在的错误信息。

如果D:\src存在,但是该路径下不存在A.class时,则报告没有找到class文件。

如果java文件存放目录正确,并且也正确的指定了其所在的包,则javac会自动编译A.java来生成A.class。

例如:上例就能够正确的生成所有需要的class文件。

但是如果把A.java中package语句去掉。

之后编译A.java生成A.class文件,之后在D:\下运行javac Test.java并不会成功,虽然在D:\src下存在A.class文件。

所以综上所述,package语句中包名必须与生成的class文件所在的目录保持一个关系,使得javac能够找到相应的class文件并且验证一个文件是否处于正确的包中。

那么classpath是什么呢?从名字也能猜得到,classpath代表class文件的存放路径。

这是个环境变量,可以添加到用户的环境变量中,其值则根据编程时具体包名、以及类的存放路径来设定。

如果不想用环境变量,也可在编译时用-classpath来设置。

classpath可以设置多个路径,路径之间利用 相隔。

编译时,javac会逐个尝试classpath的每个路径和文件的包名的组合,直到找到相应的class文件为止。

但是如果通过classpath与包名的组合在多个不同的路径下都找到了同名类,则会返回错误信息。

由于javac默认情况下在java文件的当前目录生成class文件,所以人们经常把 . 添加到classpath中,代表当前文件所在的路径。

高版本的Java编译以及运行程序可能会自动把 . 添加到classpath中。

上面的例子中由于Test.java位于A.java的上一级目录中,所以把classpath设置成 . 时,也能编译成功。

现在说说把classpath设置成 . ,它代表当前运行目录。

那么什么是这个当前运行目录呢?其实就是运行javac时所在的目录,注意:切不可认为是当前编译的那个java文件所在的目录。

如果java文件中显示的写了package packagename 则为class文件指定了包,那么这个class文件也必须应在packagename转换后的相应子目录下。

如果不写,则表示该class文件在默认包中。

现在来说说如运行java程序。

例如:classpath=D:/D:\src\A.javapackage src;public class A{ private int value; public A(){ value = 0; } public void setValue(int var){ value = var; } public int getValue(){ return value; }}//D:\src\Test.javapackage src;import src.*;public class Test{ public void static void main(String[] args){ A a = new A(); a.setValue(10); System.out.println(a.getValue()); }}我们如何运行这个程序呢?首先在src目录下运行: javac Test.java之后在任意目录下运行:java src.Test注意:切不可运行java Test命令,会提示找不到类的错误(即使在Test.class文件所在目录也不行)。

所以运行指定了package程序时,需要显示的写出其包名,即:java packagename.classname,其遵循与class文件一样的寻找规则,即在classpath+packagename中 . 变成 \ 所表示的路径下能够找到相应的classname所指的class文件。

第三节:如何打jar包以及使用jar包打jar包使用jar命令。

//D:\src\A.javapackage src;public class A{ private int value; public A(){ value = 0; } public void setValue(int var){ value = var; } public int getValue(){ return value; }}首先在src目录下运行javac A.java生成A.class。

之后在D:\目录下运行jar -cvf test.jar src就会在D:\这个目录下生成test.jar,即我们打的jar包。

那么我们如何使用这个jar包呢?首先必须把test.jar的路径加入到classpath中。

之后我们有如下的测试程序。

import src.*; //必须得有此import,因为A.class位于src包中。

如果不写则编译不通过。

public class B{ public static void main(String[] args){ A a = new A(); }}jar文件其实是一个压缩包,可以很容易的用解压软件进行解压。

解压后有如下目录关系:test.jar|--src---|--A.java|--A.class这里可以把test.jar当成目录来处理,javac会自动在classpath中解压这个test.jar并根据B.java中的import找到其中的src文件夹下的A.class文件并使用。

现在看看我们的打包命令 jar -cvf test.jar src //意思是把src文件夹整个打包如果我们这么打包: 在src目录下运行jar -cvf test.jar A.java A.class,行吗?答案是不行。

因为这样打包后路径关系为:test.jar |--A.java |--A.classjavac寻找A.class时发现test.jar下不存在src目录,则会报不存在包的错误。

所以大家一定要注意打包时应该把那个目录打进去,不应把哪个目录打进去。

如果对属于默认包的class文件打包,则只要把jar包路径添加到classpath中即可使用,无需再在程序中使用import。

当然jar命令还有很多参数可选,来满足各种不同需要的打包需求,这些就不说了。

4:利用Makefile自动编译运行Java程序下面给出一个简单的例子:这个例子中,没有手动设置Windows的环境变量,而是用-classpath指定,这样方便在不同机器之间移植。

如下目录结构:project---|---src---|---main---|---Test.java | |---package1---|---A.java | | |---B.java | | | |---package2---|---C.java | |---Makefile | |---classes---|---main---|---Test.class |---package1---|---A.class | |---B.class | |---package2---|---C.class代码如下://A.javapackagepackage1;publicclassA{privateintvalue;publicA(){value=0;}publicvoidsetValue(intvar){value=var;}publicintgetValue(){returnvalue;}//B.javapackagepackage1;publicclassB{privateStringname;publicB(){name=null;}publicvoidsetName(Stringname){this.name=name;}publicStringgetName(){returnname;}//C.javapackagepackage2;publicclassC{privateStringname;publicC(){name=null;}publicvoidsetName(Stringname){this.name=name;}publicStringgetName(){returnname;}//Test.javaimportjava.util.*;importpackage1.*;importpackage2.*;publicclassTest{publicstaticvoidmain(String[]args){Aa=newA();Bb=newB();Cc=newC();a.setValue(3);b.setName("Java");c.setName("Test");System.out.println(a.getValue());System.out.println(b.getName());System.out.println(c.getName());}}Makefile如下://Makefiletarget:javac./package1/A.java-d../classesjavac./package1/B.java-d../classesjavac./package2/C.java-d../classesjavac./main/Test.java-d../classes/main/-classpath../classesjava-classpath../classes/main;../classesTestclean:rm-rf../classes/package1/*.classrm-rf../classes/package2/*.classrm-rf../classes/main/*.class运行:makeD:\Java\project\src>makejavac ./package1/A.java -d ../classesjavac ./package1/B.java -d ../classesjavac ./package2/C.java -d ../classesjavac ./main/Test.java -d ../classes/main/ -classpath ../classes运行:make runD:\Java\project\src>make runjava -classpath ../classes/main;../classes Test3JavaTest这样,其实我们完全可以不用Eclipse、Netbeans等开发工具就能自己编译运行自己的系统了。

新手,初学,JAVA,动手,编译,、,运行,Java,程序,

100位濒死体验者有五种感受,人死后会去哪里?

1976年7月28日,一场突如其来的7.8级大地震,瞬间撕裂了唐山这座工业城市,数万民众被掩埋在废墟之下,无数人徘徊在生死边缘,经历了与死神擦肩而过的极致体验。

灾难过后,为了探寻人类濒死状态的真实身心变化,国内科研团队专门开展专项调研,随机走访100位唐山大地震濒死获救的幸存者,整理出81份有效真实口述资料。

这些亲历者均曾处于生命垂危、意识模糊的濒死状态,在被废墟掩埋、缺氧休克、重伤昏迷的绝境中,拥有了高度相似的特殊体验。

抛开玄学与迷信,从百余位普通人的真实口述中,我们能梳理出濒死之际最真实的五种身心感知,也得以窥见人们好奇已久的问题:人在生命尽头,究竟会去往何处。

说说绝境里莫名褪去的恐惧,只剩极致安宁常人面对死亡绝境,本能的反应都是恐慌、慌乱、绝望,可绝大多数受访的震后幸存者,回忆起濒死时刻,最颠覆认知的感受就是毫无畏惧,心底只剩平静与松弛。

这些亲历者大多被厚重的砖石、房梁掩埋,身体遭受重创,呼吸困难、浑身剧痛,明知自己身陷绝境、生死未卜,却没有丝毫挣扎的焦躁与对死亡的恐惧。

有年轻幸存者回忆,被掩埋的数十分钟里,身体的疼痛感慢慢变淡,原本紧绷的情绪彻底放松,心里格外坦然,甚至生出一种久违的轻松感。

还有不少人表示,在意识逐渐模糊的过程中,没有担忧亲人、没有不舍尘世,只是单纯的平和,仿佛身体和心灵都卸下了所有重担。

调研数据显示,超半数濒死体验者都出现了这种情绪转变,这也是人濒临死亡时最基础、最普遍的感受,仿佛生命在落幕前,会自动消解所有的痛苦与惶恐,为离别铺垫一份温柔的底色。

说说意识脱离躯体,以旁观者看清自身处境在所有濒死体验中,近半数幸存者都提到了一种不可思议的脱离感,也就是大众常说的意识离体体验。

这些受访者清晰地感知到,自己的意识不再依附于受伤的躯体,仿佛一缕轻盈的气息,慢慢漂浮起来,脱离了被困的身体。

有人清晰记得,自己悬浮在身体上方,能清楚看到被废墟压住的四肢、满身的尘土与伤痕,甚至能看清周围坍塌的墙体、散落的杂物,以一个完全旁观者的视角,注视着陷入绝境的自己。

这种感受无比真实,并非模糊的梦境或想象,意识清醒、视角清晰,只是身体无法动弹、无法感知外力。

很多人在苏醒后,能精准复述出自己昏迷时“看到”的场景细节,与救援人员描述的现场完全吻合。

这种身心分离的体验,让无数人疑惑,生命的本质或许从来不是躯体,而是不灭的意识。

说说脑海飞速闪过的人生全程走马灯几乎所有受访的濒死幸存者,都经历过极致清晰的人生回顾过程,也就是大家熟知的“走马灯”现象。

不同于日常碎片化的回忆,濒死时刻的记忆回放无比完整、速度极快,却每一幕都清晰真切,没有丝毫模糊。

一位重伤瘫痪的女性幸存者回忆,在被困等待救援的短短数十分钟里,自己的一生如同高清电影般飞速放映。

童年的嬉戏打闹、年少的懵懂憧憬、工作后的拼搏成长、生活里的温暖瞬间,所有细碎的美好画面,在几秒到几十秒内悉数闪过。

更特别的是,回放的画面大多是温暖、治愈的片段,没有痛苦与遗憾。

很多人坦言,那一刻思维异常清晰、运转极速,远超平日里的清醒状态,仿佛大脑在生命尽头,集中所有能量梳理完一生的轨迹,完成对尘世的最后回望。

说说穿行幽暗隧道,奔赴前方柔和光亮不少幸存者提及,濒死意识游离的过程中,会进入一片无边的黑暗,随后出现一条狭长、幽深的隧道空间,自己的意识不受控制地朝着隧道深处前行。

四周静谧无声,没有风声、没有杂音,只有纯粹的幽暗,却不会让人感到害怕。

随着不断向前,隧道尽头会慢慢浮现出柔和、温暖的光亮,这种光芒不刺眼、不炽热,却格外治愈,让人不由自主地想要靠近、奔赴。

很多人表示,朝着光亮走去的过程,心底充满期待与安宁,没有丝毫抗拒。

这也是濒死体验中极具共性的画面,仿佛生命的尽头,并非彻底的虚无黑暗,而是通往一片纯粹光明的全新维度,黑暗只是过渡,光亮才是归途。

说说时空感知错乱,告别尘世融入静谧最后一种极具共性的濒死感受,是时空感知的彻底错乱,也是最接近“生命落幕”的状态。

身处濒死时刻,人们对时间、空间的认知会完全失效,外界的时间流逝变得模糊,几秒、几分钟、几小时的界限彻底消失,仿佛时间静止,又仿佛一瞬即是永恒。

同时身体会产生强烈的失重感、虚无感,感觉躯体逐渐消散,不再属于自己,自身的意识慢慢脱离尘世的一切束缚,与周遭的静谧空间融为一体。

没有身体的痛感、没有世俗的牵绊、没有情绪的起伏,只剩纯粹的平和与通透。

很多幸存者苏醒后坦言,那种融入虚无、脱离万物的感受,是一生从未体验过的安宁,仿佛彻底放下了人间所有的执念与疲惫,归于纯粹的本源状态。

世人追问的终极答案:人死后究竟去往何处结合百余位唐山大地震濒死幸存者的真实口述,我们或许能跳出迷信传说,读懂生命尽头的真正归途。

这些高度重合的体验,告诉我们死亡从不是大众恐惧的“湮灭与终结”,而是一场温柔的告别与维度的转换。

从所有人的共性感受中可以梳理出清晰的脉络:人濒临死亡时,躯体机能率先衰竭,所有痛苦与恐惧会自动消散,意识会脱离肉身束缚,快速回顾完一生的轨迹,随后穿过幽暗的过渡空间,奔赴纯粹的光明,最终摆脱尘世的时空与躯体桎梏,归于安宁虚无的本源。

没有传闻中的地狱凶险,没有极致的痛苦折磨,这些真实的濒死体验印证,生命的终点不是虚无,而是意识的释然与升华。

所谓死亡,只是肉身的落幕,而人的意识、执念与一生的温暖记忆,会以另一种方式留存,奔赴一场平静且温柔的新生。

这些历经生死的真实感悟,也让我们懂得敬畏生命、珍惜当下,认真活着,便是对生命最好的奔赴。

猜你喜欢

0维空间到底有多可怕
0维空间到底有多可怕
高维空间 2026-05-25
asus电脑是哪个品牌
asus电脑是哪个品牌
电脑教程 2026-05-20
首雨180插卡收音机拆机图文
首雨180插卡收音机拆机图文
电脑教程 2026-05-18
电视家不能看电视了怎么办
电视家不能看电视了怎么办
电脑教程 2026-05-17
小布助手怎么卸载
小布助手怎么卸载
电脑教程 2026-05-16
vivo的第二个空间怎么弄
vivo的第二个空间怎么弄
电脑教程 2026-05-14
keep健身离线使用
keep健身离线使用
电脑教程 2026-04-25

Ecplise编译Cygwin环境、使用CDT插件开发CC++

点击下载文档

格式为doc格式