在没有 SCons 的情况下编译 Toluapp |
|
我想把这个帖子发到 tolua++ 网站上,但他们没有 wiki。
tolua++ 的 INSTALL 文件让你知道如何在没有 SCons 的情况下编译它。这很容易,但我希望能为那些需要花 5 分钟(呃……15 分钟)来弄明白这件事的人节省一些时间。
我使用的是 mingw 安装上的 gcc 3.4.2。但我认为这应该对大多数人有用,至少对于使用 gcc 的人来说,只需要做一些小的修改。
*首先,你需要 `cd` 到你下载并解压的 tolua++ 文件夹目录。
cd <path_to_tolua++_folder>\src\lib使用的命令是:
tolua++_1.0.5\src\lib> gcc -shared -o tolua++.dll *.c <path_to_lua>\Lua502.dll -I ..\..\include -I <path_to_lua>\include- 这将在 src\lib 目录中创建动态库 tolua++.dll。
tolua++_1.0.5-1\src\lib> gcc -c *.c -I ..\..\include -I <path_to_lua>\include tolua++_1.0.5-1\src\lib> ar rcsv libtolua++.a *.o- 这将在 src\lib 目录中创建静态链接库。
tolua++_1.0.5\src\bin> gcc tolua.c toluabind.c -I ..\..\include -I <path_to_lua>\include -L ..\lib\ -ltolua++ -L <path_to_lua>\Lua502.dll- 假设 libtolua++.a 已在 src\lib 目录中创建,这将会在 src\bin 目录中创建 tolua++ 可执行文件。
注意 1:如果你链接的是 lua 静态库而不是动态库,请将 `<path_to_lua>\Lua502.dll` 替换为 `-L <path_to_lua>\lib -llua`。
DLL
打开 `"文件->新建项目"` 菜单。在项目类型列表框中,选择 `"Visual C++ 项目->Win32"`。在模板列表框中,选择 `"Win32 项目"`。项目名称可以输入 `"tolua++"`。
当配置向导打开时,在右侧选择 `"应用程序设置"`。选择 `"DLL"` 并点击 `'完成'`。
在解决方案资源管理器中,右键单击 `"源文件"` 并选择 `"添加->现有项"`。浏览到 tolua++\src\lib 目录的位置。选中所有 .c 和 .h 文件并将它们添加到项目中。你也可以选择性地将 include 目录中的 tolua++.h 文件添加到 `"头文件"` 文件夹中。
在解决方案资源管理器中,右键单击 tolua++ 项目并选择 `"属性"`。
在 `"C/C++ -> 常规"` 部分,选择 `"附加包含目录"` 选项。导航到你的 Lua 头文件所在的位置。
在 `"C/C++ -> 预处理器"` 部分添加:`TOLUA_API=extern __declspec(dllexport)`。在 `"C/C++ -> 预编译头"` 部分,关闭预编译头。在 `"链接器 -> 常规"` 部分,选择 `"附加库目录"` 选项并导航到你的 Lua .lib 库文件所在的位置。在 `"链接器 -> 输入"` 部分,添加 lua.lib 和 lualib.lib(假设这是你的 lua 库)。
编译项目应该会生成一个 tolua++.dll。
EXE
要创建 tolua++.exe,请打开 `"文件->新建项目"` 菜单,选择 `Visual C++ -> Win32 -> Win32 控制台` 项目。将 tolua.c 和 toluabind.c 文件添加到项目中。
你需要为此项目添加所有相关的 lua include 和 library 目录。过程与上面相同。在 `"C/C++ -> 预处理器"` 部分,添加:`TOLUA_API=extern __declspec(dllimport)`,...等等...
请注意,对于 v1.0.92,我不得不删除 toluabind.c 中出现的 TOLUA_API。
int TOLUA_API tolua_tolua_open (lua_State* tolua_S)变为
int tolua_tolua_open (lua_State* tolua_S)
上面的评论(针对 vs2003)通常也适用于此,尽管需要做一些小的调整。
请注意,由于 VS 对 c99 支持不佳,"EXE" 构建中的 "toluabind.c" 将无法编译。有许多行看起来像这样:
... int top; top = lua_gettop(tolua_S); static unsigned char B[] = { ...
这些需要更改为:
... int top = lua_gettop(tolua_S); static unsigned char B[] = { ...
或类似的内容。
已在 vs2005 (无 service packs) 和 tolua++ 1.0.91 上测试。