昨天花了一天的时间编译了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连接库。下载地址:
好了,现在开始来编译这个机器人吧。
首先建立工程:
打开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/
你好,可以将编译好的文件发给我份吗?原网站打不开了
“最后附上所有修改好的源码和编译好的程序以及程序运行所需的dll”就是这些文件发给我好吗?
zhei87@163.com
谢谢
也给我一份好吗 我自己编译不成功 谢谢了ldwl99@qq.com 新年快乐!
非常不错啊。不知道这个是否支持2010版的QQ?博主什么时候才完善剩下的?
对编译一窍不通,又想拥有一个无消息限制的QQROBOT。