百度空间 | 百度首页 
               
 
查看文章
 
Visual Studio 2008 编译 easyMule
2008年07月01日 星期二 23:16
很早前就从网上下载了 easymule 的源码。但一直没有成功编译通过,从官方的blog上找了编译方法,未果。后来看源码写了《easyMule 源码分析之一 ——异常检测分析》,其实一直还想继续写它的源码分析,这几天有时间,决定再编译试试。

按照 readme.txt 的说法,先编译附带的库,编译很成功...我忘了之前对库的解决方案有什么修改,总之现在编译很顺利。

然后是编译 easymule 解决方案,提示如下的错误:

------ 已启动生成: 项目: EasyMule_vs2008, 配置: Debug Win32 ------
正在编译...
otherfunctions.cpp
.\WorkLayer\otherfunctions.cpp(3306) : error C2065: “CAtlRegExp”: 未声明的标识符
.\WorkLayer\otherfunctions.cpp(3306) : error C2059: 语法错误 : “>”
.\WorkLayer\otherfunctions.cpp(3308) : error C2065: “REParseError”: 未声明的标识符
.\WorkLayer\otherfunctions.cpp(3308) : error C2146: 语法错误 : 缺少“;”(在标识符“status”的前面)
.\WorkLayer\otherfunctions.cpp(3308) : error C2065: “status”: 未声明的标识符
.\WorkLayer\otherfunctions.cpp(3308) : error C2065: “reFN”: 未声明的标识符
.\WorkLayer\otherfunctions.cpp(3308) : error C2228: “.Parse”的左边必须有类/结构/联合
        类型是“'unknown-type'”
.\WorkLayer\otherfunctions.cpp(3309) : error C2065: “REPARSE_ERROR_OK”: 未声明的标识符
.\WorkLayer\otherfunctions.cpp(3309) : error C2065: “status”: 未声明的标识符
.\WorkLayer\otherfunctions.cpp(3315) : error C2065: “CAtlREMatchContext”: 未声明的标识符
.\WorkLayer\otherfunctions.cpp(3315) : error C2059: 语法错误 : “>”
.\WorkLayer\otherfunctions.cpp(3316) : error C2065: “reFN”: 未声明的标识符
.\WorkLayer\otherfunctions.cpp(3316) : error C2228: “.Match”的左边必须有类/结构/联合
        类型是“'unknown-type'”
.\WorkLayer\otherfunctions.cpp(3318) : error C2065: “mcUrl”: 未声明的标识符
生成日志保存在“file://e:\code\EasyMule\src\debug\BuildLog.htm”
EasyMule_vs2008 - 14 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========



看名字是的正则表达式相关的类。
google 了一把,在这里找到了答案(注意看回答的id,在csdn也经常见到的),发现是因为 Visual Studio 2008 没有 ATL Server Library 所致,之前的 Visual Studio 版本带不带...我也不知道,懒得考证了。到 ATL Server Library Source Code(codeplex.com) 下载了最新的库,解压。上面提到的类包含再 atlrx.h 中,看了下 otherfunctions.cpp 的 #include 区域,发现写了 #include <atlrx.h> 只不过是被注释掉了,难道他们发布代码的时候不编译一遍试试?把这个包含条目设置成有效。

然后在解决方案的属性-配置属性-C/C++-常规的“附加包含目录”里添加刚才解压的include路径。

生成,经过漫长长长长长长长长长长长长长长长长长长长长长长长长长长长长长...的等待,还是失败了。唉,这编译过程太慢了,我没有喝咖啡的习惯,真受不了这速度。以前用BCB的时候觉得编译个东西好慢,没想到,那还算快的……

失败的提示信息如下:

SharedDirsTreeCtrl.obj : error LNK2019: 无法解析的外部符号 "int __cdecl HDCheckboxImageList::CreateCheckboxImageList(class CDC *,class CImageList &,int,unsigned long)" (?CreateCheckboxImageList@HDCheckboxImageList@@YAHPAVCDC@@AAVCImageList@@HK@Z),该符号在函数 "public: int __thiscall CSharedDirsTreeCtrl::CreateCheckboxImages(void)" (?CreateCheckboxImages@CSharedDirsTreeCtrl@@QAEHXZ) 中被引用

google 了一下没啥有价值的信息,看了 SharedDirsTreeCtrl.cpp 也有#include "CreateCheckboxImageList.h" ,但是从解决方案中却找不到 CreateCheckboxImageList.h 和 CreateCheckboxImageList.cpp,打开 CreateCheckboxImageList.h ,在 CreateCheckboxImageList 的声明处点右键也无法定位到定义处...于是怀疑解决方案内根本就没加入这两个文件。于是手动添加它们到解决方案,竟然没提示文件冲突,看来有戏......

生成,由于之前编译了一次,这次编译的时间要短得多,终于完成编译了,看了一下生成的debug版的 emule.exe,36.1M这么大...大概包含了不少调试信息的缘故。

至此,成功编译了debug版的easymule,明天看看编译个release版的会不会有新问题。如果没问题,那就继续写源码分析。内存管理、upnp 等等,都打算仔细看看,编译成功就说明能跟踪流程,这样看起源码要比瞪着眼珠子死看容易得多。

-------

重新编译了 easymule 的release版的 library 解决方案和 easymule 解决方案,遇到了一些类型转换的警告信息...编译的时间同样很长,编译出的可执行文件最终大小是 6m 多,双击执行,貌似不需要其他附属的dll就可以。还不错。

类别:Windows | 添加到搜藏 | 浏览() | 评论 (2)
 
最近读者:
 
网友评论:
1
2008年07月21日 星期一 22:04 | 回复
哎,开源软件的特点。。
 
2
2009年05月20日 星期三 14:20 | 回复
呵呵,佩服。。。。。
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu