注册
登录
帮助
Battle for Wesnoth 韦诺之战 中文论坛
»
〖游戏程序〗
» win32下 VC8,9 + wesnoth1.6.5 Stable 开贴分享经验
‹‹ 上一主题
|
下一主题 ››
发新话题
发布投票
发布商品
发布悬赏
发布活动
发布辩论
发布视频
打印
win32下 VC8,9 + wesnoth1.6.5 Stable 开贴分享经验
kkwood
注册会员
帖子
2
精华
0
积分
52
在线时间
0 小时
注册时间
2010-1-8
发短消息
加为好友
当前离线
1楼
大
中
小
发表于 2010-1-8 16:46
只看该作者
win32下 VC8,9 + wesnoth1.6.5 Stable 开贴分享经验
经过两天的努力,克服了很多困难,终于编译成功了
而且 vc8,9 ,release和debug 均运行正常
Windows下编译wesnoth 的资料非常少,而且之前的旧贴,我个人认为也存在一些问题
未来几天中,我会贴出这次编译的心得,让大家少走弯路,共同学习进步
本帖最近评分记录
我为僵尸狂
金币
+10
谢谢分享
2010-8-1 10:31
UID
2494
帖子
2
精华
0
积分
52
威望
0 点
金币
62 个
阅读权限
20
在线时间
0 小时
注册时间
2010-1-8
最后登录
2010-1-9
查看详细资料
TOP
kkwood
注册会员
帖子
2
精华
0
积分
52
在线时间
0 小时
注册时间
2010-1-8
发短消息
加为好友
当前离线
2楼
大
中
小
发表于 2010-1-9 04:24
只看该作者
一
.
准备依赖库
请下载如下依赖库的
Develop file
(
lib
)和
Binary
(
Dll
),部分需要下载源文件(
source
)
我写出我下载的版本号以供参考
1. SDL
系列
–>
www.lib
sdl
.org
SDL-devel-1.2.14-VC8
(请同时下载源文件,此库需要重新编译)
SDL_ttf-devel-2.0.9-VC8
SDL_net-devel-1.2.7-VC8
SDL_mixer-devel-1.2.11-VC
SDL_image-devel-1.2.10-VC
后面
4
个没有链接,直接在他网站上搜索
2.
GTK for Win ->
www.gtk.org/download-windows.html
GLib 2.22.3
Pango 1.26.1
cairo 1.8.8
3.
字符国际化支持库
libintl-0.14.4-lib
libiconv-1.9.2-1-bin.zip
4. boost
库。
boost_1_40_0
只有源代码可下,需要自己编译,但是只编译其中
2
(
3
)个库即可
5.
一个压缩库,配合
boost
使用
zlib 1.2.3 ->
www.zlib.net
6.
两个头文件
inttypes.h
和
stdint.h
,这两个文件来自标准
c 99
,
VC2005
不完全支持
c99
标准,所以要重新下载,然后放入
wesnoth
的源文件目录。
7. POSIX thread ->
http://sourceware.org/pthreads-win32/
二,编译依赖库
之所以要重新编译一些库,是因为本工程依赖库较多,出现了
在
Windows
的
CRTLib(C
运行库)混用的问题,会引起错误
2005
,如下
LIBCMTD.lib(xxx.obj) : error LNK2005: __xxx already defined in MSVCRTD.lib(MSVCRTD.dll)
。
共有六种运行库
Single Threaded /MLLIBC (none)
Static MultiThread /MT LIBCMT _MT
Dynamic Link (DLL) /MD MSVCRT _MT and _DLL
Debug Single Threaded /MLd LIBCD _DEBUG
Debug Static MultiThread /MTd LIBCMTD _DEBUG and _MT
Debug Dynamic Link (DLL) /MDd MSVCRTD _DEBUG, _MT, and _DLL
你可以在
Property -> C/C++ -> Code Generation -> Runtime Library
进行更改
一般来讲,
Debug
使用
MTd
,
Release
用
MD
。
总之,所有
Lib
必须统一
CRT
,全用
MT
或者全用
MD
具体知识请自行查阅,不予赘述
1.
重新编译
SDL
(
SDL-devel-1.2.14-VC8
)
找到源文件下的
VC
工程,里面有两个工程,选择
SDLMain
,更改
Release
模式下
CRT
为
MTd
重新发布
具体为
Property -> C/C++ -> Code Generation -> Runtime Library
用新生成的
Lib
替代刚下载的
SDLMain.lib
2. Boost
Boost
编译比较复杂,网上有很多资料可以参考
简单来说就是
首先,我们使用
bjam
来编译,
boost
库中带有
bjam
的源文件,但是建议去下载一个编译好的
bjam.exe
,将其放在
boost
的根目录。
之后打开命令行
cmd
,转到
boost
目录下运行
bjam
。共需要编译两个库(编译后实际得到
3
个),各自又分
Debug
和
Release
模式,所以最后生成共计
6
个
Lib
编译参数如下:
Debug
运行
bjam --toolset=msvc-8.0 --with-regex stage runtime-link=static threading=multi debug
生成
libboost_regex-vc80-mt-sgd-1_38.lib
(
regex(
正则表达式
)
)
运行
bjam --toolset=msvc-8.0 --with-iostreams -sZLIB_SOURCE=i:\zlib123 stage runtime-link=static threading=multi debug
(注意:
sZLIB_SOURCE=i:\zlib123
是你
zlib
的位置)
生成
libboost_iostreams-vc80-mt-sgd-1_38.lib
和
libboost_zlib-vc80-mt-sgd-1_38.lib
(
iostreams
和
zlib
)
Release
更改最后为参数为
Release
即可,如
bjam --toolset=msvc-8.0 --with-regex stage runtime-link=static threading=multi release
bjam --toolset=msvc-8.0 --with-iostreams -sZLIB_SOURCE=i:\zlib123 stage runtime-link=static threading=multi release
你会在
booset/stage
目录下找到编译好的库
三
VC
工程设置
1
建立一个新工程
Win32 Project
,空工程即可
2
将
wensnoth
的源文件导入工程,包括文件夹
gui
,
serialization
,
editor2
和
widgets
,建议将头文件和源文件分开,好习惯。注意,有三个文件不要导入
loadscreen_empty.cpp
,
malloc.c
,
poolalloc.c
3
将依赖库的头文件和
Lib
文件的目录依次添加,比较多,耐心
Tools->option->
roject and Solution ->VC++ Directories
注意,
头文件目录里请添加
wesnoth
的目录
\wesnoth-1.6.5\wesnoth-1.6.5\src
Glib
库需要添加两个头文件目录
glib-dev_2.22.3-1_win32\include\glib-2.0
和
I:\wesnoth\glib-dev_2.22.3-1_win32\lib\glib-2.0\include
别忘添加
Boost
的目录
头文件目录共计
14
个,如果没数错的话
Lib
文件目录,在包括刚编译好
Boost
的
lib
情况下,
共计
12
个
4. Setting
(感谢
ancientcc
前辈的努力)
General -> Project Defaults-> Character Set: Use Multi-Byte Character Set
C/C++ -> General -> Detect 64-bit Portability Issues: No
(
default Yes (/Wp64)
)
Preprocessor -> Preprocessor Definitions:
WIN32;NDEBUG;_WINDOWS;NOMINMAX;_CRT_SECURE_NO_DEPRECATE
(增加
NOMINMAX
宏,
_CRT_SECURE_NO_DEPRECATE
宏)
Language –> Enable Run-Time Type Info
:
Yes(/GR)
(
default No
)
Linker -> Input ->
Additional Dependencies: SDL.lib SDLmain.lib SDL_image.lib SDL_ttf.lib SDL_mixer.lib libintl.lib SDL_net.lib Ws2_32.lib pango-1.0.lib pangocairo-1.0.lib pangoft2-1.0.lib pangowin32-1.0.lib cairo.lib glib-2.0.lib gobject-2.0.lib (
视情况添加
lua5.1.lib)
Ignore Specific Library
:填成空
。(不要忽略
msvcrt.lib
!!!我们已经解决了
CRT
混用的情况)
四
代码修改和遗留问题
我们的目标版本是
wesnoth-1.6.5 Stable
源代码主要有三个地方需要修改
1.
有两到三处
"Female 鈾
€
这样的符号无法识别,大概是
Uniciode
的问题,自己在后面加一个引号,否则后面的代码无法编译(这个符号实际要表达男女性别标识符)
2. font.CPP Line 40
#ifdef
CAIRO_HAS_FT_FONT
#include <fontconfig/fontconfig.h>
#endif
这个宏其实是被定义了的(在
<cairo-features.h>
中),但是这个头文件是
Linux
下文件,而且后面某处还会调用这个头文件中的方法,都是
linux
下的。
所以我选择在前面加了一句
#undef
CAIRO_HAS_FT_FONT
但是似乎引起了游戏中无法更换语言的问题,具体还在研究中
3. Game.CPP 2200
#ifndef
DISABLE_POOL_ALLOC
extern "C" {
void init_custom_malloc();
}
#endif
这个函数是被定义在
malloc.c
中,而且会在接下来的几行中被调用。但是如果
malloc.c
加入工程中的话会引起一些错误,不加入的话,显然不会被编译,从而引起
Linking
错误。至今无法解决,希望大家能解决并告诉我。
我的解决方案是屏蔽它
五
结束
现在大家可以尝试编译了!
有问题联系我
email:
kkwoodf@gmail.com
msn:
kkwood1984@hotmail.com
感谢前辈
ancientcc
[
本帖最后由 kkwood 于 2010-1-9 04:28 编辑
]
UID
2494
帖子
2
精华
0
积分
52
威望
0 点
金币
62 个
阅读权限
20
在线时间
0 小时
注册时间
2010-1-8
最后登录
2010-1-9
查看详细资料
TOP
Dugucloud
独孤云
汉化小组
维尔帝近卫军
帖子
182
精华
0
积分
272
在线时间
38 小时
注册时间
2009-7-28
发短消息
加为好友
当前离线
3楼
大
中
小
发表于 2010-5-3 17:35
只看该作者
呵呵,不错。有了这技术,我们可以搞“中国版”了。
¡Hasta la victoria siempre!
UID
2186
帖子
182
精华
0
积分
272
威望
0 点
金币
260 个
阅读权限
50
性别
男
来自
湖广行省静江府
在线时间
38 小时
注册时间
2009-7-28
最后登录
2011-12-10
查看个人网站
查看详细资料
TOP
poet
版主
帖子
214
精华
1
积分
370
在线时间
38 小时
注册时间
2010-6-12
发短消息
加为好友
当前离线
4楼
大
中
小
发表于 2010-7-21 15:33
只看该作者
楼主: 1.8.3 开始可以支持 vc9 编译,我看官方文档说已经把所有额外需要的库都提供成一个包了,不妨试试,这个估计搞起来要简单些。
UID
3246
帖子
214
精华
1
积分
370
威望
10 点
金币
304 个
阅读权限
100
来自
poet
在线时间
38 小时
注册时间
2010-6-12
最后登录
2012-1-3
查看详细资料
TOP
‹‹ 上一主题
|
下一主题 ››
最近访问的版块
〖多人游戏竞技〗
〖地图、战役创作〗
〖游戏进阶〗
〖其它开源游戏〗
〖新手入门〗
〖论坛事务〗
〖画面及音乐〗
〖经典游戏〗
常见问题
〖休闲灌水〗
≡ Wesnoth 交流大厅 ≡
〖新手入门〗
〖游戏进阶〗
〖地图、战役创作〗
≡ Wesnoth 竞技 ≡
〖多人游戏竞技〗
〖WCC〗 - 筹办中
≡ 改进游戏 ≡
〖汉化工作〗
创作及思考
〖画面及音乐〗
〖游戏程序〗
常见问题
≡ 闲聊区 ≡
〖休闲灌水〗
〖其它开源游戏〗
Zero-K
〖经典游戏〗
〖特惠资讯〗
≡ 管理区 ≡
〖论坛事务〗
Wesnoth.org
|
官方下载
|
官方论坛
|
中文wiki
|
游戏截图
|
游戏视频
|
GPL许可证
|
FAQ(英文)
|
FAQ(中文)
Amazon.cn Widgets