Chinaunix首页 | 论坛 | 博客
  • 博客访问: 323675
  • 博文数量: 53
  • 博客积分: 1037
  • 博客等级: 准尉
  • 技术积分: 1066
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-13 14:09
文章分类

全部博文(53)

文章存档

2016年(1)

2015年(10)

2013年(2)

2012年(40)

分类: WINDOWS

2016-04-23 03:03:56

Code::Blocks 10 用了很久了,用得还算方便。今天看到其官网上版本已经到了16.01了,想来要不升级一下吧。于是烦恼的事情也就来了,当然麻烦也不算太大。

1. 第三方库的添加

为了干净的安装,我把原来的Code::Blocks10 完全卸载了,并且彻底删除干净。但是我忘了,有些库我是后来加进去的,时间一长自然也就不知道添加了什么库。只是最近在用 libcurl ,才想到需要重新去下载了。

附: curl 的官方网站 https://curl.haxx.se/
下载 libcurl 的链接 https://curl.haxx.se/dlwiz/?type=lib

关于 libcurl 的安装说明:

解压缩从上面网址下载的 curl-7.40.0-devel-mingw32.zip 文件
(1) 将 curl-7.40.0-devel-mingw32\bin\curl.exe 等文件拷贝到 C:\Program Files\CodeBlocks\MinGW\bin 中,其中 zlib1.dll 已经存在,就不必覆盖了,因为相比CodeBlocks提供的比较旧。

(2) 将 curl-7.40.0-devel-mingw32\include 下的所有文件拷贝到 C:\Program Files\CodeBlocks\MinGW\include, 当然 README 文件不用拷贝。

(3) 将 curl-7.40.0-devel-mingw32\lib 下的所有文件拷贝到 C:\Program Files\CodeBlocks\MinGW\lib 中。

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

还有哪些库不是 Code::Blocks 自带的?
比如 libsqlite3.a


2. wxWidgets 得重新编译

当然如果不用 wxWidgets,就不用考虑这个问题。我之前用的是 wxWidgets2.9.4 , 也是在使用了稳定版 2.8.12 后折腾升级的。现在官网 上最新的稳定版本是 3.0.2 。

为什么要重新编译?原因在于新的 Code::Blocks 自带的 MinGW (我一般下载附带MinGW的版本,怕烦)中的 gcc 版本是 4.9 ,而旧的 Code::Blocks 10 自带的 MinGW 中的 gcc 版本是 4.7(好像是,删了就忘了) 。用 4.9 的 gcc 去编译那些引用 4.8或以下的 gcc 编译生成的 wxWidgets 库可能会出现问题。总之,要一致。

那好,我们就下载新版本的 wxWidgets 吧。

先别高兴太早啊,问题总是有的。让我们先回忆一下如何编译 wxWidgets

(1) 到  上下载 wxWidgets, 我选择 Windows 7Z (16MB)


(2) 将其加压缩到 C 盘根目录,比如 C:\wxWidgets-3.0.2

(3) 按 Win+R, 输入 cmd,  在命令提示符下键入  cd \wxWidgets-3.0.2 转到wxWidgets所在的目录。然后 cd build\msw 进入 msw 目录。

(4) 确保 mingw32-make.exe 能够找到,不妨找一下吧
    C:\wxWidgets-3.0.2\build\msw> where mingw32-make.exe
    我的显示为 C:\Program Files\CodeBlocks\MinGW\bin\mingw32-make.exe
    这说明,环境变量 PATH 有该路径 “C:\Program Files\CodeBlocks\MinGW\bin” 。所以先安装好 Code::Blocks。

(5)  看一下  C:\wxWidgets-3.0.2\build\msw\gcc_mswu 这个文件夹是否为空,当然一开始是空的。

如果未空(比如想重新编译),则执行下面的命令将其清空。
mingw32-make -f makefile.gcc SHARED=0 UNICODE=1 BUILD=release clean

确保是空的后,执行下面的命令
mingw32-make -f makefile.gcc SHARED=0 UNICODE=1 BUILD=release

其中参数  SHARED=0 表示静态,具体含义参见 
如果你要动态的,就设置为 1.  

这个过程一般要半小时以上的时间才能编译完成。不过没过多久,我们就碰到了下面的问题




这时由于 c++ 11 新标准带来的问题,上面也说了,还在实验过程中,所以要使用c++11 必须多做一步,这在 Code::Blocks 新建工程后也要麻烦一下,在 Build options 中要勾选 c++ 11 standard。

解决办法:


用编辑器打开gcc 的配置文件 C:\wxWidgets-3.0.2\build\msw\config.gcc ,找到 CXXFLAGS,就是下面

# Standard flags for C++ 
CXXFLAGS ?= 

在它下面加上

CXXFLAGS += "-std=gnu++11"


保存。然后再执行

mingw32-make -f makefile.gcc BUILD=release SHARED=0 UNICODE=1 

就没有问题了。


编译的时间会比较长,至少半小时。


--------------------
References:





--------------------
Remark:

使用旧版的 MinGW(所含 gcc 是 4.8)编译没有报错。但是这样编译得到的 wxWidgets 无法被新版 CodeBlocks (所含 gcc 是4.9)使用。


--------------------
总结:

有时用得好好的,就不要赶时髦去升级了,一升级牵扯的事情就会很多。我现在还是用着很久之前安装的 Archlinux , 没有更新也用得挺好的,Windows 7 是自动更新,也不用费心。去掉强迫升级的心态,不然会非常累。除非自己是开发这个软件的,或者由于某种原因不得不选择升级。

    
阅读(4534) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~