fltk-2.0.x-r6921在vs2008下编译全记录

来源:互联网 发布:人脸识别原理及算法pca 编辑:程序博客网 时间:2024/06/14 06:09

可以说是费尽了力所终于把要命的fltk-2.0.x-r6921编译通过了。。。

 

1>------ 已启动生成: 项目: ask, 配置: Debug Win32 ------
2>------ 已启动生成: 项目: qubix, 配置: Debug Win32 ------
1>正在创建浏览信息文件...
2>正在创建浏览信息文件...
1>Microsoft 浏览信息维护实用工具 Version 9.00.21022
2>Microsoft 浏览信息维护实用工具 Version 9.00.21022
2>Copyright (C) Microsoft Corporation. All rights reserved.
1>Copyright (C) Microsoft Corporation. All rights reserved.
2>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
2>qubix - 0 个错误,0 个警告
1>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/ask_/BuildLog.htm”
1>ask - 0 个错误,0 个警告
3>------ 已启动生成: 项目: pack, 配置: Debug Win32 ------
3>正在创建浏览信息文件...
3>Microsoft 浏览信息维护实用工具 Version 9.00.21022
3>Copyright (C) Microsoft Corporation. All rights reserved.
3>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
3>pack - 0 个错误,0 个警告
4>------ 已启动生成: 项目: label, 配置: Debug Win32 ------
4>正在创建浏览信息文件...
4>Microsoft 浏览信息维护实用工具 Version 9.00.21022
4>Copyright (C) Microsoft Corporation. All rights reserved.
4>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
4>label - 0 个错误,0 个警告
5>------ 已启动生成: 项目: input, 配置: Debug Win32 ------
6>------ 已启动生成: 项目: boxtype, 配置: Debug Win32 ------
6>boxtype : warning PRJ0009 : 未能打开生成日志进行写入。
6>请确保该文件未被其他进程打开并且未被写保护。
5>正在创建浏览信息文件...
6>正在创建浏览信息文件...
5>Microsoft 浏览信息维护实用工具 Version 9.00.21022
5>Copyright (C) Microsoft Corporation. All rights reserved.
6>Microsoft 浏览信息维护实用工具 Version 9.00.21022
6>Copyright (C) Microsoft Corporation. All rights reserved.
5>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
5>input - 0 个错误,0 个警告
6>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
6>boxtype - 0 个错误,1 个警告
7>------ 已启动生成: 项目: image, 配置: Debug Win32 ------
7>正在创建浏览信息文件...
7>Microsoft 浏览信息维护实用工具 Version 9.00.21022
7>Copyright (C) Microsoft Corporation. All rights reserved.
7>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
7>image - 0 个错误,0 个警告
8>------ 已启动生成: 项目: fonts, 配置: Debug Win32 ------
8>正在创建浏览信息文件...
8>Microsoft 浏览信息维护实用工具 Version 9.00.21022
8>Copyright (C) Microsoft Corporation. All rights reserved.
8>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
8>fonts - 0 个错误,0 个警告
9>------ 已启动生成: 项目: fltkdll_images, 配置: Debug Win32 ------
9>正在创建浏览信息文件...
9>Microsoft 浏览信息维护实用工具 Version 9.00.21022
9>Copyright (C) Microsoft Corporation. All rights reserved.
9>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/fltkdlld/BuildLog.htm”
9>fltkdll_images - 0 个错误,0 个警告
10>------ 已启动生成: 项目: tile, 配置: Debug Win32 ------
10>正在创建浏览信息文件...
10>Microsoft 浏览信息维护实用工具 Version 9.00.21022
10>Copyright (C) Microsoft Corporation. All rights reserved.
10>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
10>tile - 0 个错误,0 个警告
11>------ 已启动生成: 项目: file_chooser, 配置: Debug Win32 ------
12>------ 已启动生成: 项目: editor, 配置: Debug Win32 ------
12>editor : warning PRJ0009 : 未能打开生成日志进行写入。
12>请确保该文件未被其他进程打开并且未被写保护。
12>正在创建浏览信息文件...
11>正在创建浏览信息文件...
11>Microsoft 浏览信息维护实用工具 Version 9.00.21022
11>Copyright (C) Microsoft Corporation. All rights reserved.
12>Microsoft 浏览信息维护实用工具 Version 9.00.21022
12>Copyright (C) Microsoft Corporation. All rights reserved.
11>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
12>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
12>editor - 0 个错误,1 个警告
11>file_chooser - 0 个错误,0 个警告
13>------ 已启动生成: 项目: cursor, 配置: Debug Win32 ------
13>正在创建浏览信息文件...
13>Microsoft 浏览信息维护实用工具 Version 9.00.21022
13>Copyright (C) Microsoft Corporation. All rights reserved.
13>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
13>cursor - 0 个错误,0 个警告
14>------ 已启动生成: 项目: color_chooser, 配置: Debug Win32 ------
14>正在创建浏览信息文件...
14>Microsoft 浏览信息维护实用工具 Version 9.00.21022
14>Copyright (C) Microsoft Corporation. All rights reserved.
14>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
14>color_chooser - 0 个错误,0 个警告
15>------ 已启动生成: 项目: checkers, 配置: Debug Win32 ------
15>正在创建浏览信息文件...
15>Microsoft 浏览信息维护实用工具 Version 9.00.21022
15>Copyright (C) Microsoft Corporation. All rights reserved.
15>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
15>checkers - 0 个错误,0 个警告
16>------ 已启动生成: 项目: demo, 配置: Debug Win32 ------
16>正在创建浏览信息文件...
16>Microsoft 浏览信息维护实用工具 Version 9.00.21022
16>Copyright (C) Microsoft Corporation. All rights reserved.
16>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
16>demo - 0 个错误,0 个警告

 

fltk2.0目前还在开发阶段,果然是不成熟,从官网上下载的源码编译就会有多处错误,死活算是编出来了,下面按照编译顺序对这些错误一一进行说明!

 

1.打开../fltk-2.0.x-r6921/ide/vcnet文件中的fltk.sln,转换文件成vs2008,在整个解决方案中先只编译fltk项目文件。
出现错误159个。。。先别晕,仔细看下出错原因:无法打开包括文件:“cairo.h”,cairo是fltk2.0中新加入的第三方库,实际上这个是可选扩展功能,如果你够细心就会发现目前使用的配置方案是Debug Cairo,也就是使用,将其改为debug,再次生成fltk项目!

 

 

2.这次错误少多了,只有三个,也先别高兴错误少,却常常是一些很棘手的问题!出错原因:无效的预处理器命令“warning”定位到出错位置,发现出错的是这样一行代码:# warning "This method will not work on this system. (you can ignore this warning)"这个显然不是c或者c++的风格,其实这是fltk提醒我们本系统不支持这个功能,分析下这几行代码
#ifdef __WIN32__
//..
#elif USE_X11
//..
#else
# warning "This method will not work on this system. (you can ignore this warning)"
#endif
现然我们应该进入的是__WIN32__,这个容易在项目的 “属性 - C/C++ - 预处理器 - 预处理器定义” 中加入__WIN32__再次编译fltk项目文件现在发现了第二个*warning错误,定位到程序:#warning we assume PixelType = 6 ARGB32 in test it is true for color images,我在这里理解为fltk对我们提示,所以直接注释掉了!再次生成
1>fltk - 0 个错误,9 个警告
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
lib文件夹中也生成了文件fltk2d.lib,似乎看到胜利的曙光~~

 

 

3.好的,现在可以先做下测试了,生成hello工程,这个是fltk的入门级程序,只有19行代码,只对fltk2d.lib有依赖!本来以为会很顺利地编译出来。编译结果:9个错误..

1>正在链接...
1>fltk2d.lib(Widget.obj) : error LNK2019: 无法解析的外部符号 "void __cdecl delete_associations_for(class fltk::Widget *)" (?delete_associations_for@@YAXPAVWidget@fltk@@@Z),该符号在函数 "public: virtual __thiscall fltk::Widget::~Widget(void)" (??1Widget@fltk@@UAE@XZ) 中被引用
1>fltk2d.lib(ShortcutAssignment.obj) : error LNK2019: 无法解析的外部符号 "public: void __thiscall fltk::Widget::add(class fltk::AssociationType const &,void *)" (?add@Widget@fltk@@QAEXABVAssociationType@2@PAX@Z),该符号在函数 "public: bool __thiscall fltk::Widget::add_shortcut(unsigned int)" (?add_shortcut@Widget@fltk@@QAE_NI@Z) 中被引用
1>fltk2d.lib(ShortcutAssignment.obj) : error LNK2019: 无法解析的外部符号 "public: bool __thiscall fltk::Widget::find(class fltk::AssociationType const &,void *)const " (?find@Widget@fltk@@QBE_NABVAssociationType@2@PAX@Z),该符号在函数 "public: bool __thiscall fltk::Widget::add_shortcut(unsigned int)" (?add_shortcut@Widget@fltk@@QAE_NI@Z) 中被引用
1>fltk2d.lib(ShortcutAssignment.obj) : error LNK2019: 无法解析的外部符号 "public: bool __thiscall fltk::Widget::remove(class fltk::AssociationType const &,void *)" (?remove@Widget@fltk@@QAE_NABVAssociationType@2@PAX@Z),该符号在函数 "public: bool __thiscall fltk::Widget::remove_shortcut(unsigned int)" (?remove_shortcut@Widget@fltk@@QAE_NI@Z) 中被引用
1>fltk2d.lib(ShortcutAssignment.obj) : error LNK2019: 无法解析的外部符号 "public: void __thiscall fltk::Widget::set(class fltk::AssociationType const &,void *)" (?set@Widget@fltk@@QAEXABVAssociationType@2@PAX@Z),该符号在函数 "public: void __thiscall fltk::Widget::remove_shortcuts(void)" (?remove_shortcuts@Widget@fltk@@QAEXXZ) 中被引用
1>fltk2d.lib(ShortcutAssignment.obj) : error LNK2019: 无法解析的外部符号 "public: void * __thiscall fltk::Widget::get(class fltk::AssociationType const &)const " (?get@Widget@fltk@@QBEPAXABVAssociationType@2@@Z),该符号在函数 "public: unsigned int __thiscall fltk::Widget::shortcut(void)const " (?shortcut@Widget@fltk@@QBEIXZ) 中被引用
1>fltk2d.lib(ShortcutAssignment.obj) : error LNK2019: 无法解析的外部符号 "public: void * __thiscall fltk::Widget::foreach(class fltk::AssociationType const &,class fltk::AssociationFunctor &)const " (?foreach@Widget@fltk@@QBEPAXABVAssociationType@2@AAVAssociationFunctor@2@@Z),该符号在函数 "public: bool __thiscall fltk::Widget::test_shortcut(bool)const " (?test_shortcut@Widget@fltk@@QBE_N_N@Z) 中被引用
1>fltk2d.lib(ShortcutAssignment.obj) : error LNK2019: 无法解析的外部符号 "void * __cdecl fltk::foreach(class fltk::AssociationType const *,class fltk::Widget const *,class fltk::AssociationFunctor &)" (?foreach@fltk@@YAPAXPBVAssociationType@1@PBVWidget@1@AAVAssociationFunctor@1@@Z),该符号在函数 "unsigned int __cdecl fltk::foreachShortcut(class fltk::Widget const *,class fltk::ShortcutFunctor &)" (?foreachShortcut@fltk@@YAIPBVWidget@1@AAVShortcutFunctor@1@@Z) 中被引用
1>../../test/hellod.exe : fatal error LNK1120: 8 个无法解析的外部命令
1>生成日志保存在“file://f:/学习/study/近期学习/CGAP相关/fltk/fltk-2.0.x-r6921/ide/vcnet/Debug/BuildLog.htm”
1>hello - 9 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

无法解析的是fltk2d.lib中的函数。。。看来我们的库并没有成功生成,怎么办呢??

 

 

4.这个问题应该算是最让人头疼的了,首先想到的是不是刚刚做过修改的#warning是不是有问题,不过后来否决了,再回去看错误位置,出在 fltk::Widget,到fltk工程的头文件里面查找到widget.h文件,在文件中搜索add,果然找到了出错的位置

void  add(const AssociationType&, void* data);
 void  set(const AssociationType&, void* data);
 void* get(const AssociationType&) const;
 void* foreach(const AssociationType&, AssociationFunctor&) const;
 bool  remove(const AssociationType&, void* data);
 bool  find(const AssociationType&, void* data) const;

就是这几个函数无法解析了,看来是只有定义没有实现了,右键转到也没有反应,直接注释掉?再编译还是有7个error!

1>f:/学习/study/近期学习/cgap相关/fltk/fltk-2.0.x-r6921/src/shortcutassignment.cxx(92) : error C3861: “find”: 找不到标识符
1>f:/学习/study/近期学习/cgap相关/fltk/fltk-2.0.x-r6921/src/shortcutassignment.cxx(93) : error C3861: “add”: 找不到标识符
1>f:/学习/study/近期学习/cgap相关/fltk/fltk-2.0.x-r6921/src/shortcutassignment.cxx(102) : error C2660: “remove”: 函数不接受 2 个参数
1>f:/学习/study/近期学习/cgap相关/fltk/fltk-2.0.x-r6921/src/shortcutassignment.cxx(111) : error C2660: “fltk::Widget::set”: 函数不接受 2 个参数
1>f:/学习/study/近期学习/cgap相关/fltk/fltk-2.0.x-r6921/src/shortcutassignment.cxx(121) : error C3861: “get”: 找不到标识符
1>f:/学习/study/近期学习/cgap相关/fltk/fltk-2.0.x-r6921/src/shortcutassignment.cxx(131) : error C2660: “fltk::Widget::set”: 函数不接受 2 个参数
1>f:/学习/study/近期学习/cgap相关/fltk/fltk-2.0.x-r6921/src/shortcutassignment.cxx(256) : error C2660: “fltk::foreach”: 函数不接受 2 个参数

这几个error看来都是找不到刚刚那几个函数,那么直接注释掉,肯定是不行的,那么它的实现到底在哪里呢?

 

 

5.取消注释,再次右键转到,都是其它命名空间的实现,突然我注意到一个文件:WidgetAssociation.cxx ,看起来它倒是跟widget.h有着那么点关系,进去看看:

void* fltk::foreach(const AssociationType* at, const Widget* wg, AssociationFunctor& fkt)

{

 

}

果然是实现的代码,那么为什么有实现代码还是会无法解析呢?突然想起自己经常犯的一个错误,那就是新加入的类只是拷到工程所在文件而不拷贝到项目资源管理器中会导致无法解析,到fltk的source文件夹中找了找,果然没有WidgetAssociation.cxx 文件,下面就好办了,把WidgetAssociation拖到管理器中,再次生成!成功~~

 

 

6.再次编译hello工程,这段19行的代码总算是过了~~运行实例,亲切的hello world跃入眼底。。。

 

 

7.下面再依次编译fltk_images,fltk_opengl,等其它库都正常,只有到fltkdll时出错了

错误 2 error C2375: “fltk::cursor”: 重定义;不同的链接 f:/学习/study/近期学习/cgap相关/fltk/fltk-2.0.x-r6921/src/cursor.cxx 347

重定义我一般都是加入/force强制内联的,这次也故技重施,却发出不管用了。。后来没办法,注释掉这段!!!编译,又出业warning,用上面的解决办法,再编译,过了。。。

 

 

8.fltk所需要的库文件编译好了后,再编译例子,全部生成了!全过~~~~

 

总结一下,需要改的主要为以下几点:

1>在fltk和fltk两个工程文件的 “ 属性 - C/C++ - 预处理器 - 预处理器定义 ”中加入__WIN32__ 

2>注释掉Cursor.cxx 文件中的

#warning we assume PixelType = 6 ARGB32 in test it is true for color images

3>注释掉Cursor.cxx 文件中的

// FL_API fltk::Cursor *fltk::cursor(Image *img, int x, int y) {
//   img->fetch();
//   fltk::Cursor *c = new fltk::Cursor;
//   c->cursor = create_cursor_from_image(img, x, y);
//   c->resource = 0;
//   return c;
// }
4>[重要]添加src文件夹下面的WidgetAssociation.cxx文件到fltk工程[重要]

5>修改配制Debug Cairo为 Debug

 

其中4>是很不容易被发现的,这个也警示了我们官方下载的src文件也不能保证是完全正确的!!!