linux下带有CDT的Eclipse的helloworld编译错误的解决方法

啊哈!!!!!!!!!!!!!!!!!!!!!

终于把这个问题给解决了,困扰了我一个晚上!!!!!害得我在节假日里没有电影看。万恶的Eclipse!!!

 

 

现在冷静下来,重新审视一下刚才尝试的所有过程。

首先,我的OS是Fedora14,因为希望使用IDE,所以选择使用Eclipse。

其次,因为Unix上的多数开发是C、C++,所以选择CDT。于是,在http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/helios/SR2/eclipse-cpp-helios-SR2-linux-gtk.tar.gz  下载到已经带有CDT的Eclipse.

然后,回到Fedora之后,感觉原来在装系统时使用的Eclipse是个冗余。所以使用了系统工具中的“添加、删除软件”将所有和Eclipse有关的东西全部删除了。

之后,我就自己解压缩(tar -zxvf)刚才下载得Eclipse。因为在安装Fedora的时候已经选择了编程套件,所以JDK是已经安装好了。然后就可以启动Eclipse了。

然后,使用IDE新建一个样板hello world.编译——悲剧发生了,

 

代码如下:(应该没有问题)
#include 
< iostream >
using   namespace  std;

int  main() {
cout 
<<   " !!!Hello World!!! "   <<  endl;  //  prints !!!Hello World!!!
return   0 ;
}

具体错误是:
****  Build of configuration Debug  for  project a  ****

make all  
Building file: ..
/ src / a.cpp
Invoking: GCC C
++  Compiler
g
++   - O0  - g3  - Wall  - - fmessage - length = 0   - MMD  - MP  - MF " src/a.d "   - MT " src/a.d "   - o " src/a.o "   " ../src/a.cpp "
cc1plus: 错误:要生成依赖项,您必须指定 
- M 或  - MM
make: 
***  [src / a.o] 错误  1

 

 

先把解决方法写出来,如果有兴趣看我是怎么尝试的过程的话,可以继续往下看。

解决方法:“Project——Property——c/c++ buider——settings“。然后在GCC C++ Compiler(如果是c的hello world,应该修改GCC C Compiler)里,修改Optimization和Debugger里面下拉框中的参数,果然在将Debugger的-g3改为-g之后奇迹出现了!!

 

 

 

那是无语啊,网上找了很多,都是驴头不对马嘴的。没办法,自己想办法!!

1. 尝试Eclipse里的“Project——Property——c/c++ buider——settings“。然后在GCC C++ Compiler(如果是c的hello world,应该修改GCC C Compiler)里,发现只有Optimization和Debugger里面可以增减gcc的参数。于是在两个里面选择一个,增加"-M"

2. 重新编译。编译通过了!但是链接出错了。

 

****  Build of configuration Debug  for  project test  ****

make all 
Building file: ..
/ src / test.cpp
Invoking: GCC C
++  Compiler
g
++   - O0  - g3  - - Wall  - - fmessage - length = 0   - MMD  - MP  - MF " src/test.d "   - MT " src/test.d "   - o " src/test.o "   " ../src/test.cpp "
Finished building: ..
/ src / test.cpp
 
Building target: test
Invoking: GCC C
++  Linker
g
++    - o " test "   . / src / test.o   
.
/ src / test.o: file not recognized: File truncated
collect2: ld 返回 
1
make: 
***  [test] 错误  1

 

3. 无语啊,然后开始继续baidu,发现没有人有这个问题!!

4. 于是发现-M是不对的,那么行。俺就来-MM!还是回到了2的结果。

5. 怎么办??我查到了一份GCC中文手册。发现-M,-MM,-MD,-MMD是预处理选项。而且文档中说这四个选项其实很类似,只是在实现细节上有差别。仔细看了Eclipse给出的gcc的参数,发现是有-MMD的。也就是说,很有可能是因为其他原因造成的,而不是提示所说的缺少-M或者-MM!

6. 这里有一个细节,我一直在使用debug,那么如果编译成release会怎么样?ok.试一下。给力通过了!

7. 回忆一下,问题可能在哪里?release没错,debug有错,再想一下release与debug的区别在哪里。悟了!是优化和调试代码!那么问题应该是出现在表示优化的-O参数或者表示debug的-g参数上?再去“Project——Property——c/c++ buider——settings“。然后在GCC C++ Compiler(如果是c的hello world,应该修改GCC C Compiler)里,修改Optimization和Debugger里面下拉框中的参数,果然在将Debugger的-g3改为-g之后奇迹出现了!!

 

总体来说,如果仔细去研究一下gcc的参数就可以发现一些蛛丝马迹。

-MD
和`-M'选项类似,但是把依赖信息输出在文档中,文档名通过把输出文档名末尾的
`.o'替换为 `.d'产生.同时继续指定的编译工作---`-MD'不象`-M'那样阻止正常的编译任务.
Mach的实用工具`md'能够合并`.d'文档,产生适用于`make'命令的单一的 依赖文档.
-MMD 和`-MD'选项类似,但是输出结果仅涉及用户头文档,忽略系统头文档.

然后再看一下出现了link错误的时候的出错信息。好像说.o文件不完整。那么就可能会想到时debugger选项的问题了,因为指定过-MD或-MMD之后,"文档名通过把输出文档名末尾的`.o'替换为 `.d'产生" .也许解决问题的关键就在这里吧。

 

转载于:https://www.cnblogs.com/aicro/archive/2011/04/03/2004931.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值