用eclipse在Windows下做C开发
关键字: c因为项目需要,需要在Windows下用C开发。一直不喜欢Microsoft对IDE的过渡封装,因此在Visual Studio下坚持了2个月实在是忍耐到了极点。于是开始尝试用Eclipse+cdt。
首先遇到的问题就是安装。Eclipse3.3 + CDT4.x.x-master 居然存在严重Bug。害了浪费了整整两天时间,google了以后才发现大家都被这个问题困扰。直接改为Eclipse for C/C++ dev后才让编译工作顺利下去。
初期,编译器选择的是MinGW。可以说CDT与MinGW结合的相当具备可用性。几乎不需要任何配置,就可以立刻着手编码、编译、调试。
接下来的工作是将原来VC下写的代码移植到CDT+MinGW环境中。起初一些简单代码段的编译是非常容易的,只需要稍做修改,将诸如 #include "stdafx.h"、#pragma comment...注释掉即可编译通过。但随着移植工作的进行,一些比较复杂的代码段开始出现了问题,其中3个问题是比较严重的:
1、Unicode char*问题。VC在6版本的时候对Unicode 的处理欠缺考虑,因此用增加了_UNICODE预处理定义,同时配合_T()宏的使用。MinGW gcc编译这些代码时,出现了大量的错误提示和警告。多半都在TCHAR WCHAR的转换上。调试了半天,可运行编译结果的时候出现不稳定状况。
2、第二个是Link Lib的问题。MinGW提供了大量必要的头文件和Lib库,基本上能够完全兼容VC原有代码的。但有少部分VC对ANSI C的扩展未实现。这在特定的情况下给移植工作带来了很大的工作量,我不得不一层层的跟踪进去补充。耗费了很多精力。
3、第三个问题是目前看起来最严重的。这个项目要求编译后的exe文件要非常微小——少于100K。但MinGW在这方面显出了明显的弱势。一个简单的Hello World 的C++项目Release编译后也要达到800K左右,strip后也只减到200K。难以满足我们的要求。
鉴于上面的原因,我开始尝试Eclipse +CDT + VC编译器的结合。CDT几乎没提供任何针对VC的缺省选项和配置。只在Error parsers处提供了个CDT Visual C Error Parser。因此,不得不手工配置了。
经过很短的尝试,就配置成功,很轻松。方法如下:
- 创建C/C++项目时,选择Makefile project->Hello World C++ Project。注意:Toolchain 要选择--Other Toolchain---。
- 项目创建好后要修改自动生成的Makefile文件。最关键的是下面两个修改:
- 将“OBJS = Test.o" 改为 "OBJS = Test.obj”。因为VC的编译器cl自动识别的目标文件时*.obj而不是*.o,这是与Gcc的重要区别。否则你编译的时候会出现“NMAKE : fatal error U1073: don't know how to make”错误提示。
- 将“clean:" 下一行的rm改为erase。erase是windows自带的删除命令。
- 右键点开项目Properties设置窗口,选择C/C++ Build,钩掉Use default build command的checkbox。在Build->Build command处将make改为nmake。(nmake就是vc的“make”)。
- 选择C/C++ Build->Discovery options,在Compiler invocation command处,将gcc改为cl。(cl是VC的编译器)
- 选择C/C++ Build->Envionment,新创建3个环境变量:
PATH=C:\Program files\Visual Studio\VC98\Bin;C:\Program files\Visual Studio\Common\MSDev98\Bin LIB=C:\Program files\Visual Studio\VC98\Lib INCLUDE=C:\Program files\Visual Studio\VC98\Include 注:这里的C:\Program files\Visual Studio\就是你的VC安装路径
好了,大功告成。
相同的代码用VC编译后的大小只有40K,符合要求了。只是编译速度较MinGW的gcc慢了很多。之后我又用Visual Studio 2005的C++编译器尝试过,配置方法完全相同(改改安装路径就可以了)。但编译速度提高了非常多。甚至超过了MinGW的gcc。(Visual Studio 2005的C++编译速度一直口碑不错)。
从目前来了,在Eclipse CDT中采用了vc编译器后,代码移植工作非常顺利。主要的工作都是花在编写Makefile上,而我一直认为自己写Makefile是件令人愉快的事,这能让你自己控制编译的过程。
Eclipse CDT+VC的一个缺点是无法使用GDB进行DEBUG了,这对我来说无所谓,反正频繁使用gdb来调试代码是个不好的习惯。
工程还在继续,待有了新心得有了空,再记下来。
评论
有个问题和LZ一起讨论下。
也是从LINUX转到WINDOWS,用eclips做开发。
现在如下:在LINUX上做程序时,用到了第三方库。接着要转到WINDOWS,而这个第三方库却转不过去了。 这个挺头疼的。。
作Linux上的程序一直,当然用MinGW编译器要方便多了。转VC库要折腾死人。Linux程序移植到Windows上,这可是个大话题,就你的情况,如果这个第三方库没有提供source或者for windows的lib/dll,是没法移植的。
也是从LINUX转到WINDOWS,用eclips做开发。
现在如下:在LINUX上做程序时,用到了第三方库。接着要转到WINDOWS,而这个第三方库却转不过去了。 这个挺头疼的。。
不过LZ为什么不下 eclips有个直接for c/c++的版本呢?
Windows操作系统上的C+编译器很多阿。可选择的集成开发环境也的很多阿。比如n年前很多程序员用C++Builder而不是vc6。
当然,vs2003以后,Windows下的综合IDE几乎没人能跟MS比了,只有个Eclipse 的CDT还能在C/C++领域对抗一下。这没办法,操作系统是人家自己的。Windows下的开发的关键有时候并非某种语言本身,而是MS提供的各种API和库。
vc我还是用了很多年了, 现在都是vs 直接集成所有语言, 所有方面的开发. 很强大的
如果在windows 下开发linux运行的? 为何不直接在linux下用eclipse cdt + gcc 或者 + intel的编译器也不错啊
你的gcc什么版本?有没有试过-Os,以及strip的时候把不要的东西通通去掉?
单纯用cc编译ANSI C也不太大,但一旦用g++编译*.cpp文件就不得了了。
你的gcc什么版本?有没有试过-Os,以及strip的时候把不要的东西通通去掉?
是啊。所以我一般只用MacOSX和Linux,但这个项目没办法,需求类似Windows个人防火墙,只能依赖Windows了。
发表评论
- 浏览: 47495 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
自省十训
neora 写道 3、不写代码注释。   ...
-- by sunrie -
自省十训
andyhu1007 写道常用a a1 a2 b c d x y z 做变量名。 ...
-- by hunter001201 -
自省十训
常用a a1 a2 b c d x y z 做变量名。 - 编成经验 ...
-- by andyhu1007 -
自省十训
说的很不错.参考
-- by hunter001201 -
自省十训
黑体字是什么? 建议?还是评论?数字后面是什么? 不应该做的事吗?
-- by sg552






评论排行榜