今天想在我的RedHat上装个CodeBlock,费了挺多时间的。装到要吃晚饭的时候终于成功了,于是决定写篇文章记录下我的安装过程。
因为安装过程非常“曲折”,所以这篇文章也记录了很多我试错的过程,很多步骤在后面看来都可以算作废步骤。如果希望看到最精简的解决方案,可以求助其他大牛的安装过程。这篇文章只相当于我今天在我的计算机上安装CodeBlock的一个笔记(惭愧~~~ :-P)。
1.我的环境
我是在RedHat上安装的CodeBlock,版本号可以用下面这个命令查询
cat /etc/redhat-release
查询出来的版本信息为:
Red Hat Enterprise Linux Server release 6.4 (Santiago)
我在虚拟机里安装的是64位的RedHat,关于RedHat是32位还是64位,可以用命令
arch
查出来,我查出来的是x86_64,说明是64位的
2.下载CodeBlock
登陆到CodeBlock官方网站的下载页面 http://www.codeblocks.org/downloads
登陆后在左侧树形菜单中找到 Main→Download→Binaries
因为我是在RetHat上安装,所以我选了和RetHat比较近的Fedora上的安装包
codeblocks-13.12-1.el20.x86_64.tar.xz
我在 Download from 栏中选择了 Sourceforge.net
安装过程可以参考官网自己的wiki页面 http://wiki.codeblocks.org/index.php?title=Installing_Code::Blocks_nightly_build_on_Fedora
下载后我把它放在了我系统里 /home/oracle/Downloads/codeblocks (oracle是我在这个linux系统里的用户名)
解压这个文件,输入命令
xz -d codeblocks-13.12-1.el20.x86_64.tar.xz
解压后可以发现目录 codeblocks-13.12-1.el20.x86_64.tar,再次解压
tar xvf codeblocks-13.12-1.el20.x86_64.tar
解压缩后有文件夹 fc20,进入后可以发现目录 fc20/x86_64/ 中有四个文件
codeblocks-13.12-1.el29.x86_64.rpm
codeblocks-contrib-devel-13.12-1.el29.x86_64.rpm
codeblocks-contrib-13.12-1.el29.x86_64.rpm
codeblocks-devel-13.12-1.el29.x86_64.rpm
输入下面的命令进行安装
yum install codeblocks*
结果安装失败,查看提示信息后发现需要wxGTK
3.下载并安装wxGTK
下载地址:http://www.filewatcher.com/m/wxGTK-2.8.1.tar.bz2.8891289-0.html
这个地址里有三个下载地址:
2007-01-07 ftp://ftp.wxwindows.org/pub/2.8.1/wxGTK-2.8.1.tar.bz2
2007-01-07 ftp://ftp.wxwidgets.org/pub/2.8.1/wxGTK-2.8.1.tar.bz2
2007-01-07 ftp://biolpc22.york.ac.uk/pub/2.8.1/wxGTK-2.8.1.tar.bz2
我选择了第三个,下载后可得到文件 wxGTK-2.8.1.tar.bz2
我把它保存到了目录 /home/oracle/Downloads/wxgtk 中
输入下面的命令解压:
tar jxf wxGTK-2.8.1.tar.bz2
解压完毕后会有一个目录 wxGTK-2.8.1 进入后执行以下命令:
./configure --enable-xrc --enable-monolithic --enable-unicode
执行这步时出错了,RedHat提示我要安装GTK+
输入这个命令可以安装GTK+
yum install gtk*
查看GTK+安装情况,可以用这个命令:
pkg-config --list-all | grep gtk
我输入这个命令后得到的结果是
gtk+-2.0 GTK+ - GTK+ Graphical UI Library (x11 target)
gtk-doc gtk-doc - API documentation generator
gtk+-x11-2.0 GTK+ - GTK+ Graphical UI Library (x11 target)
gtk+-unix-print-2.0 GTK+ - GTK+ Unix print support
重新运行上面那个配置 wxGTK-2.8.1 的命令
./configure --enable-xrc --enable-monolithic --enable-unicode
就可以顺利执行了,下一步就是输入make命令
make
这个时候又出现错误了:大意是说 struct _GSocket 被typedef了两次,这个结构的很多属性找不到
我参考了这篇博客:http://blog.csdn.net/ssl2009/article/details/7062621
找到文件 src/gtk/gsockgtk.cpp,修改上面include部分
...
#include<stdio.h>
//用define围起来
#define GSocket GlibGSocket
#include <gdk/gdk.h>
#include <glib.h>
#undef GSocket
#include "wx/gsocket.h"
#include "wx/unix/gsockunx.h"
...
将 gdk/gdk.h 和 glib.h 的上面添加一个宏 GlibGSocket,在下面再把这个宏取消,就可以顺利编译通过啦
make
make install
安装完毕后,输入命令
wx-config --libs
可以看到 -L/usr/local/lib -L/usr/lib64 -lwx_gtk2u-2.8
有-lwx_gtk2u-2.8说明安装成功!安装后要重启系统
4.安装wxWidgets
重启系统后,我发现之前下载的CodeBlock四个rpm文件还是没法运行,上网查了下,可能还要装wxWidgets吧,抱着试试看的心理,就装了一个:
CSDN上找的资源:http://download.csdn.net/download/chenjack537/4313344
下载后保存到 /home/oracle/Downloads/wxwidgets,解压缩
tar -xzvf wxWidgets-2.8.12.tar.gz
解压后会发现一个新目录 wxWidgets-2.8.12,进入后输入命令安装(安装后重启系统)
./configure --with-gtk --prefix=/usr
make
make install
5.重新安装wxGTK 2.8.12
上面的工作进行完毕后,4个rpm文件还是不能正确运行,提示的错误信息依然是找不到so文件
上网查了下,有人说是需要版本2.8.12才能支持CodeBlock(汗!)
只能把之前装的2.8.1版本的wxGTK先卸载了
rm -rf /usr/bin/wx*
rm -rf /usr/include/wx*
rm -rf /usr/lib/wx*
rm -rf /usr/lib/libwx*
rm -rf /usr/local/bin/wx*
rm -rf /usr/local/include/wx*
rm -rf /usr/local/lib/wx*
rm -rf /usr/local/lib/libwx*
ldconfig
这回我下载了 wxGTK-2.8.12-1.el6.rf.i686.rpm
还是从CSDN上找的资源:http://download.csdn.net/download/muyazhong/4689639
下载后保存到目录 /home/oracle/Downloads/wxgtk-2.8.12
输入下面的命令安装:
yum install wxGTK-2.8.12-1.el6.rf.i686.rpm
重启电脑后,输入命令
wx-config --version
可以发现版本号从之前的 2.8.1 变成了 2.8.12
这次安装,由于没有像之前那样在configure脚本中输入 --prefix=/usr,因此要进行如下操作:
vi /etc/ld.so.conf
在最后一行添加 /usr/local/lib
保存后退出,用ldconfig命令加载刚才的设定
下面是此时我的Linux对三个命令的反应
命令:wx-config --prefix
输出:/usr
命令:wx-config --libs
输出:-pthread -L/usr/lib64 -lwx_gtk2_richtext-2.9 -lwx_gtk2_aui-2.8 -lwx_gtk2_xrc-2.8 -lwx_gtk2_qu_2.8 -lwx_gtk2_html_2.8 -lwx_gtk2_adv_2.8 -lwx_gtk2_core-2.8 -lwx_base_xml-2.8 -lwx_base_net-2.8 -lwx_base-2.8
命令:which wx-config
输出:/usr/bin/wx-config
6.重新下载CodeBlock
遗憾的是,这次虽然把wxGTK的版本调到了2.8.12,之前下载的4个rpm文件还是没法运行(==!)
我觉得应该换一个包试一试,我又在SourceForge里找了个低一些的CodeBlock版本:
http://ncu.dl.sourceforge.net/sourceforge/codeblocks/codeblocks-8.02-src.tar.bz2
下载后我把它保存到 /home/oracle/Downloads/codeblocks-8 .02
输入命令解压缩文件:
tar jxf codeblocks-8.02-src.tar.bz2
得到目录 codeblocks-8.02,进入后,输入命令:
./configure -prefix=/usr
运行完全正常,这个时候再用make编译,结果报错!
错误信息说 prefix.cpp 的第396和432行存在语法错误:invalid conversion from 'const char*' to 'char*'
这个时候,就需要对代码进行修改
vim ./src/src/prefix.cpp
到第396行和第432行,原来的语句为
end = strrchr (path, '/');
现在把它们都改为
end = strrchr (const_cast<char*>(path), '/');
这个时候重新make,就可以成功编译通过了
make
make install
编译完毕后重启系统。
7.运行CodeBlock
在终端(Terminal)中输入命令
codeblocks
这个时候如果报错:codeblocks: error while loading shared libraries: libcodeblocks.so.0: cannot open shared object file: No such file or directory
以root身份进入到文件 /etc/ld.so.conf 中,将/usr/local/lib加入到文件末尾,并输入命令ldconfig,就可以解决了
第一次进入CodeBlock时,弹出了窗口 Compilers auto-detection,我这里只有 GNU GCC Compiler 是 Detected状态,于是直接把它“Set as default”
这样就可以进入到CodeBlock界面中了
8.一个HelloWorld程序
下面我来创建一个HelloWorld程序
在上方的菜单中选择:File→New→Project
在弹出窗口的左侧列表中选择Files,选择C/C++ Source
语言选择C(在C和C++之间选择),Filename with full path项中选择:/home/oracle/Documents/codeblocktest.c
在这个文件中写下如下代码:
#include <stdio.h>
void main()
{
printf("Hello World!\n");
}
按下Build按钮进行编译
下方的Build log会提示编译状况
Build完毕后,会发现.o文件和可执行文件已经被自动生成好,在命令行中直接就可以运行了。
END