Code::Blocks使用释疑
来源:互联网 发布:ccf工资计算java 编辑:程序博客网 时间:2024/05/13 01:03
Code::Blocks有着强大的编辑特性和开放的编译器接口,是免费的C++IDE的不二选择。但在使用过程中也会给初学者带来不少疑惑,下面我就自己遇到的一些情况逐一说明,希望能帮助不少初窥Code::Blocks门径的人,少走弯路。
一:编译器选择。
1. Code::Blocks + GUN GCC(MinGW)。这是Code::Blocks的默认编译器,强烈推荐使用,除了编译选项以及报错信息和VC不一致以外,其他没有什么区别。MinGW库对windows的支持也很到位,debug很自然的集合在IDE中。而且,不需要额外的下载和设置。
2. Code::Blocks + VC2003 ToolKit。乍看上去很不错,我也是用此组合尝试着编译了一下WinXP SDK,编译没有问题,但他不能进行Debug。VC2003 ToolKt不包含Debug工具,网上有文章介绍使用Debug tools for Windows(X86),他是一个独立的Debug工具,不能和Code::BlocksIDE整合。因此,他是一个诱人的馅饼,当然,如果你不介意使用Debug tools for Windows(X86)作为Debug工具的话,也可以使用。建议高手使用,初学者不要浪费时间在此组合中。
3. Code::Blocks + VC2005 express edition。在我眼里,这是一个陷阱。原因不在于Code::Blocks,而在于VC2005 Express本身像一个玩具,居然缺少基本的STL库,充分体现了微软的小气,缺少实用价值。当然你可以使用另外的STL库来扩充。本身来说,Code::Blocks和VC2005 express edition就有一点重复,都注重编辑性能,不注重库问题。不建议使用,不值得你去浪费时间,还不如你直接使用VC2005 express。
二:编译器选项和环境设置
C++编译一定要注意两个问题,路径设置、编译器选项设置,否则会出现意想不到的错误。Code::Block有三层编译设置,一层是全局的设置,适用于所有的项目,第二层是项目的设置。第三层是项目中不同编译目标的选项设置,如Debug和Release设置。
1. 全局的设置(第一层):选择菜单“Settings”----“Compiler and Debuger settings”.
如上图,根据编译器选择的不同,我们需要设置不同的路径,编译工具、编译器设置。
Search Directory:(Compiler Tab页)用来设置全局的Include路径。
(Linker Tab 页)用来设置全局Lib库的路径
(Resource compiler Tab 页)用来设置资源编译器的搜索路径。
ToolChain :依据不同的编译器选择编译和Debug工具。
Compiler settings:不同编译器的编译开关。
LinkerSettings:用来添加附加库和附件连接参数。
当你使用不同的编译器时,上面的设置就要更具编译器的特性做适当的设置。
2. 项目的设置(第二层和第三层):选择菜单”Project”----“Build options”.
如上图,通过Project build options可以设置第二层和第三层编译参数。在左面的树形目录的顶部是项目名称,选择它可以设置整个项目的编译选项(第二层设置),在下面是项目的不同编译目标的编译选项(第三层)。不同的编译目标可以在菜单”project”---“properties”中的“build target”页面进行添加或管理。
第二层和第三层和设置和全局的编译选项相似:
Search Directory:(Compiler Tab页)用来设置项目的Include路径。
(Linker Tab 页)用来设置项目Lib库的路径
(Resource compiler Tab 页)用来设置资源编译器的搜索路径。
Compiler settings:(CompilerFlags 页面)不同编译器的编译开关。
(Other Options 页面)其他的编译参数。可参阅GCC帮助。
(#define 页面) 自定义的参数。例如你可以加入_UNICODE以支持宽字符
LinkerSettings:用来添加附加库和附件连接参数。
当准确的设置好这些参数你就可以开始编译程序了!
三:常见问题
1. 无法在IDE中进行调试。
Code::Blocks默认设置并不是调试环境,也就是说,在Compiler选项中没有设置调试Flag。解决方法是在第二层或第三层编译器设置中在Compiler Flags页面中将”produce debugging symbols [-g]”选中。或者直接在#define页面中写入自定义参数_DEBUG。
当然推荐使用的方法是在第三层设置中建立Debug和Release两种不同的编译目标。
2. error LNK2001: unresolved external symbol
这是最常见的链接错误,是用户在编译时使用了正确的头文件,但是在引用库文件时却没有设置正确的库。解决方法是在菜单“Object”---“Build Option”中的Link setting页面中添加合适的库引用。
在使用VC2003 Tool kit时也会因为Compiler Flags设置不对而出现此条出错信息。由于VC2003 Tool Kit没有提供可调试库,所以当你在Compiler Flags页面中设置使用了调试库,就会出现找不到调试函数链接的问题。引起问题的相关Compiler Flags设置如下:
Single-threaded debug Runtime library[/MLd]
Mult-threaded Debug Runtime library [/MTd]
Mult-threaded DLL Debug Runtime library [/MDd]
解决方法是将他们都设置程非Debug的相关选项。如下:
Single-threaded Runtime library[/ML]
Mult-threaded Runtime library [/MT]
Mult-threaded DLL Runtime library [/MD]
3. error LNK2019: unresolved external symbol
这条错误信息基本和error LNK2001相似,具体有什么区别,我还没有搞很清楚。
4. 在Code::Blocks中使用中文的问题
在使用中文后,编译时遇到Illegal byte sequence错误,网上找到的解决办法:
Setting->Compiler and debug Options->Compiler Setting页面->Other页面,加入
-finput-charset=GBK
这种方法在简单情况下可用,但在编译多语言项目和复杂项目时错误百出,不足采用。解决方法是在第二层编译选项中设置Object->Build Options->Compiler settings->#define中加入UNICODE和_UNICODE参数,使项目使用UNICODE编码。这种方法的代价是你在定义字符串时必须使用宏TEXT或_L。而所有的函数都将使用宽字符版本。
5. CodeBlocks/MinGW/lib/libmingw32.a(main.o):main.c|| undefined reference to `WinMain@16'
此错误出现在链接完成的最后阶段,是链接程序找不到程序的window入口点。引起此原因的的主要问题是MinGW好像只认识WinMain入口点,不认识高版本的_t WinMain入口点。_tWinMain 是基本函数。根据编译标志 _MBCS 或 _UNICODE生成 int WinMain() 或 int wWinMain()。但在MinGW编译器下,解决方法很简单,就是将_tWinMain改为WinMain()。即使使用_UNICODE标志也只用采用int WinMain()作为程序入口点,而且这样的设置程序运行正常!!
6. error: 'RBHITTESTINFO' has not been declared
当我们编译WinXP等SDK项目时,由于没有设置项目的平台版本和IE版本参数,致使许多扩展的控件和数据结构不可用。解决办法是在编译器设置中的“#define” 页面写入平台版本参数。如_WIN32_IE=0x0500.
关于windows版本控制参数如下表所示:
Minimum system required Macros to define
Windows Server 2008 _WIN32_WINNT>=0x0600
WINVER>=0x0600
Windows Vista _WIN32_WINNT>=0x0600
WINVER>=0x0600
Windows Server 2003 _WIN32_WINNT>=0x0502
WINVER>=0x0502
Windows XP _WIN32_WINNT>=0x0501
WINVER>=0x0501
Windows 2000 _WIN32_WINNT>=0x0500
WINVER>=0x0500
Windows NT 4.0 _WIN32_WINNT>=0x0400
WINVER>=0x0400
Windows Me _WIN32_WINDOWS=0x0500
WINVER>=0x0500
Windows 98 _WIN32_WINDOWS>=0x0410
WINVER>=0x0410
Windows 95 _WIN32_WINDOWS>=0x0400
WINVER>=0x0400
Internet Explorer 7.0 _WIN32_IE>=0x0700
Internet Explorer 6.0 SP2 _WIN32_IE>=0x0603
Internet Explorer 6.0 SP1 _WIN32_IE>=0x0601
Internet Explorer 6.0 _WIN32_IE>=0x0600
Internet Explorer 5.5 _WIN32_IE>=0x0550
Internet Explorer 5.01 _WIN32_IE>=0x0501
Internet Explorer 5.0, 5.0a, 5.0b _WIN32_IE>=0x0500
Internet Explorer 4.01 _WIN32_IE>=0x0401
Internet Explorer 4.0 _WIN32_IE>=0x0400
Internet Explorer 3.0, 3.01, 3.02 _WIN32_IE>=0x0300
三:建立U盘编译环境
对于经常在不同机器上进行编程的人员,需要频繁的设置两个不同的编译环境和文件,还会出现不同步的现象。Code::Blocks可以简单的变为绿色版,将它直接拷贝到U盘,就可以制作一个口袋版的C++IDE,随时可以进行编程。具体做法如下:
将Code::Blocks安装后的目录拷贝到U盘中,然后将C:/Documents and Settings/Default user/Application Data/codeblocks/目录中的default.conf文件也拷贝到U盘CodeBlocks目录下即可。目录中的Default user依据不同的计算机登陆设置会有不同,需要自己确定。
四:库选择
使用C++当然要选择好库了,个人喜好轻量级的Win32xx库,有完全的源代码,而且完全支持GCC编译器。如果考虑到移植等问题,那就使用wxWidget。着看个人爱好了。
好了,仅依据自己的经验分享给大家,希望高手补充!
2011-5-17
- Code::Blocks使用释疑
- Code::Blocks使用释疑
- 学习使用Code::blocks
- code blocks使用
- Code::Blocks 使用 SQLite3
- Code::Blocks 使用汇总
- Code::Blocks 的使用
- code::blocks使用体会(不断更新)
- Code::Blocks手册 使用篇
- Code::Blocks使用pc-lint
- code::blocks 使用Pthread库
- Code::Blocks IDE安装使用
- Code::Blocks手册 使用篇
- Code::Blocks
- Code::Blocks
- Code::Blocks
- Code::Blocks
- Code::Blocks
- Triomino 拼图
- win7中安装asp.net的问题 编译器错误信息: CS0016: 未能写入输出文件
- Poj2135 Farm Tour (最小费用流)
- 显示新闻视频ASPX页面嵌入视频代码
- 空类及其继承类的大小
- Code::Blocks使用释疑
- CodeBlocks下如何配置OpenCV
- Bonita应用下 添加用户
- 吐血简述在arm-linux上编译helloworld时候的抓狂经历
- GDB符号调试器(二)
- oracle 创建分区
- [019] Android平台调用WebService详解
- 浅谈软件架构师的基本素质
- 浅谈如何学习linux