目标:使用脚本,实现GUI可配置
支持:wxWidgets, LUA, wxLua, MinGW, Bakefile
平台:Windows
版本:Lua5.1, wxWidgets2.8.xx,GCC4.5.0
1.环境搭建
1.1下载MinGW
http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst-20101030/mingw-get-inst-20101030.exe/download
安装到%MinGW%, 添加路径%MinGW%/bin至环境变量path中。可以把%MinGW%/bin中的mingw32-make.exe 拷贝一份并改名为make.exe, 以后就可以直接使用make命令了。
-shared 编译dll,例如
gcc -shared -o mydll.dll mydll.o mydll.def -Wl,--out-implib,libmydll.a
-Wl为链接参数,以上表示输出一个导入库文件libmydll.a
注意C语言格式函数在DEF中输出,声明应该加extern "C"
--enable-auto-import可以找到正确的C++函数名, 通常加上-Wl,--enable-auto-import,少一堆的提示
bkl文件中可以把DEF文件写在ldflags标签中,如
1.2下载一份LUA源代码
用mingw32-make编译之。
下载到目录%LUA%, 进入%LUA%/src目录,建立一个批处理文本make-mingw32.bat,内容如下
mingw32-make -f Makefile mingw
执行之,编译。详细可参阅%LUA%/README。
1.3 wxWidgets编译
下载wxWidgets, 安装到%WXWIN%, 进入%WXWIN%/build/msw, 建立一个批处理文本make-mingw32.bat,内容如下
mingw32-make.exe -f makefile.gcc BUILD=release SHARED=1 UNICODE=0 USE_OPENGL=1 COMSPEC=%comspec%
执行之,编译。
组件选择可修改%WXWIN%/include/wx/msw/setup.h
有可能需要打个patch, 下载xxx.patch, 使用cygwin\bin\patch.exe打上这些补丁,命令大致是
patch.exe p0 < xxx.patch
STC编译
进行目录%WXWIN%/contrib/build/stc,建立一个批处理文本make-mingw32.bat, 内容如下
mingw32-make -f makefile.gcc BUILD=release SHARED=1 UNICODE=0 WX_SHARED=1 COMSPEC=%comspec%
执行之,编译。
1.4 wxLua编译
下载wxLua,安装到%WXLUA%,进入%WXLUA%/build/msw,建立一个批处理文件make-mingw32.bat,内容如下
mingw32-make -f makefile.gcc BUILD=release SHARED=1 UNICODE=0 WX_SHARED=1 LINK_DLL_FLAGS="-shared" LINK_MODULE_FLAGS="-shared" COMSPEC=%comspec%
执行之,编译。
如果传递参数USE_SYSTEM_LUA=1,那么wxLua就不会编译自带的LUA,如果已经独立下载编译了LUA,可以使用这样参数。比较郁闷的是wxLua自带的LUA是编译成lua5.1.dll,与其他的环境如LFW和LUA自身的不一样,它们是编译成lua51.dll,所以wxLua编译起来有点麻烦。而且wxLua自带的LUA也没编译一个可执行文件出来, 要是有就直接可用它做LUA环境。如果实在搞不定,把lua5.1.dll和lua51.dll一起带上。也可以修改一下wxLua里面关于LUA的编译,在生成DLL之后加上一段生成.exe,这样就让wxLua彻底地包含了LUA。修改makefile.gcc如下
...
ifeq ($(SHARED),1)
ifeq ($(USE_SYSTEM_LUA),0)
../../../lib/gcc_$(VAR_140)/lua5.1.dll: make_dir_lua_dll $(LUA_DLL_OBJECTS)
$(CC) $(LINK_DLL_FLAGS) -fPIC -o $@ $(LUA_DLL_OBJECTS) $(LDFLAGS) $(VAR_144) -Wl,--out-implib=../../../lib/gcc_$(VAR_140)/liblua5.1.a
@echo modify by loon.x
@echo create lua.exe...
$(CC) -o ../../../lib/gcc_$(VAR_140)/lua.exe ../../../modules/lua/src/lua.c -L../../../lib/gcc_$(VAR_140) -llua5.1
endif
endif
...
各个程序点的版本要一致,编译的选择也要一致。
参考:http://wxlua.sourceforge.net/docs/install.html
1.5 Bakefile
从http://www.bakefile.org/wiki/UserExtensions 下载dll-def-file.bkl(需要输出函数如luaopen_xxx)。这个好像有问题,因为--disable-auto-import后会有一大堆的函数找不到(名称对不上,如果纯C就不会有名字问题)而导致编译失败。可能以后更深刻理解各个编译过程也许会有不同的看法。目前并没有用到它,而是直接加ldflags标签内容。
从http://www.bakefile.org/attachment/ticket/236/bakefile_gen_envvars.patch下载一个bakefile_gen不能展开环境变量的补丁文件。用cygwin的命令patch将这个补丁打上去,在bakefile的安装目录下执行行命令
patch -p0 -i bakefile_gen_envvars.patch
2.hello world
编写一个wxWidgets的控件,用wxBind包装,由Lua调用。
21.代码
http://wlmmlw.download.csdn.net/
效果图
控件响应消息
这样的helloworld是不是有点累人。