用wxDev C++编译Windows下的QQRobot

作者: gaohailin 分类: 网站技术 发布时间: 2010-11-28 13:59

昨天花了一天的时间编译了QQ机器人,搜索了N多的资料,终于搞定了。

前提准备:

1。QQ机器人源码。下载地址:

http://im.jecat.cn/demo/releases/qqrobot_0.1.3.rar

2。wxDev C++ 。下载地址:

http://wxdsgn.sourceforge.net/?q=node/4

3。MySQL 的C连接库。下载地址:

http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-6.0.2.zip/from/http://mysql.oss.eznetsols.org/

好了,现在开始来编译这个机器人吧。

首先建立工程:

打开wxDev C++,新建一个工程,类型:Console Application,语言:C工程。

添加源码包里所有的 .c 和 .h 文件到工程

接下来编译下吧(肯定会出错,不过有了错误信息下面就方便来更正了)

编译信息出来了,果然错误一大堆啊

F:\Projects\C++\QQRobot.moyo\db.h mysql.h: No such file or directory.

打开刚才下载的那个C链接库,把include文件夹复制到wxDev的include目录里并重命名为mysql。然后在wxDev的“工具 – 编译选项 – 目录 – C包含文件”里添加上 “D:\Program Files\wxDev\include\mysql”

D:\Program Files\wxDev\include\mysql\mysql_com.h syntax error before “SOCKET”

编辑db.h,在 #include <mysql.h> 前面加上一句:#include <winsock.h>

F:\Projects\C++\QQRobot.moyo\myqq.c [Warning] passing arg 1 of time’ makes pointer from integer without a cast

编辑myqq.c,搜索 “time(nStartTime) ;” ,改为 time(&nNow);

multiple definition of buddy_msg_callback’
multiple definition of qun_msg_callback’

修改 libqq.c 和 webqq.c ,将函数“buddy_msg_callback”和“qun_msg_callback”都注释掉

[Linker Error] undefined reference to mysql_real_connect@32′

这些一大串子的 undefined reference to xxx 错误搞了我很久,本来以为是gcc编译的时候没有把一些文件编译进去,但是修改了后还是不管用。不过最后还是找到了解决办法。

这个错误的原因是编译时缺少静态库,mysql的静态库wxDev没有。

大家可以从这里下载:libmysql.a ,然后将压缩包里的libmysql.a释放到wxDev的lib目录中即可。

然后呢,在wxDev的“工程- 工程属性 – 附加的命令行选项 – 连接器”里把下面几个静态库包含进来

“D:/Program Files/wxDev/lib/libmysql.a”
“D:/Program Files/wxDev/lib/libpthread.a”
“D:/Program Files/wxDev/lib/libws2_32.a”

(记得将“D:/Program Files/wxDev/”改为你实际的安装路径)

[Linker Error] undefined reference to sleep’

这个错误是因为在windows中,sleep这个函数首字母是大写的,搜索替换 db.c 和 myqq.c 里的sleep就可以了。

到现在,所有的编译错误就都解决了。

修改下db.c里的mysql连接信息

char *db_server = “localhost”;
char *db_server = “localhost”;
char *db_user = “**db user name**”;
char *db_password = “**db password**”;
char *db_database = “**db name**”;

编译运行吧。

程序最多可以传递4个参数,第一个是QQ账号,第二个是QQ密码,第三个是所属服务ID,第四个是是否隐身登陆。一般用前两个就可以了。

QQRobot QQ账号 QQ密码

我在运行时发现收到消息时程序就会错误退出,提示缺少数据表,然后我根据程序代码整理出来一张表

CREATE TABLE IF NOT EXISTS log_daily_summary (
nId int(11) NOT NULL auto_increment,
sIM text collate utf8_unicode_ci,
sFrom text collate utf8_unicode_ci,
sTo text collate utf8_unicode_ci,
Date date default NULL,
nSend int(11) default NULL,
nReceive int(11) default NULL,
PRIMARY KEY  (
nId)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

再补充一张表

CREATE TABLE IF NOT EXISTS robots_quns (
sIM text collate utf8_unicode_ci NOT NULL,
sRId text collate utf8_unicode_ci NOT NULL,
sQunId text collate utf8_unicode_ci NOT NULL,
sQunName` text collate utf8_unicode_ci
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

现在就还差最后一张表 [ qun_cmds ] 没整理出来了。

最后附上所有修改好的源码和编译好的程序以及程序运行所需的dll

转自:http://moyo.uuland.org/code/compile-qqrobot-use-wxdev-under-windows/

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

3条评论
  • zhei87

    2011 年 01 月 21 日 下午 7:41

    你好,可以将编译好的文件发给我份吗?原网站打不开了
    “最后附上所有修改好的源码和编译好的程序以及程序运行所需的dll”就是这些文件发给我好吗?
    zhei87@163.com
    谢谢

  • 零点

    2011 年 01 月 22 日 上午 10:02

    也给我一份好吗 我自己编译不成功 谢谢了ldwl99@qq.com 新年快乐!

  • 小何

    2011 年 02 月 07 日 上午 9:41

    非常不错啊。不知道这个是否支持2010版的QQ?博主什么时候才完善剩下的?
    对编译一窍不通,又想拥有一个无消息限制的QQROBOT。

发表评论

电子邮件地址不会被公开。 必填项已用*标注