编译 wxLua(跨平台和静态)

我计划创建一个新的C++项目,在其中编写一些C++函数,在其中嵌入带有wxLua的Lua引擎,将我的C/C++函数可用于Lua一侧,然后使用Lua编写我的主程序(包括GUI)。

我的IDE/编译器是Code::Blocks/GCC在Windows上。我想将其编译为Windows、Linux和OSX。

我的问题:

  • 编译wxWidgets和Lua
  • 构建wxLua
  • 创建一个跨平台项目,知道为哪些操作系统使用哪些库

我阅读了很多关于wxLua的文档,发现最好使用wxWidgets 2.8.12和Lua 5.2.3(因为它们是两个最新的稳定且受支持的版本)。

如果可能的话,我希望程序最终是一个独立的可执行文件。

所以我猜我需要编译Lua和wxWidgets作为.lib库(Windows)和.a库(Linux/OSX),是这正确吗?我该怎么做呢?

一旦做到了这一点,我需要创建什么类型的项目,并如何将wxLua嵌入到该项目中? 我找不到太多有关它的信息。

最后,我该如何告诉我的IDE/项目/makefile(?)为哪个操作系统使用哪些库?

点赞
用户1442917
用户1442917

以下是我在Windows/OSX/Linux上如何编译wxwidgets/wxlua来进行跨平台项目的说明,但我使用的是gcc/mingw-tdm而不是Code::Blocks,所以您可能需要根据您的环境进行调整。

以下是如何在Windows上构建wxwidgets:

  ./configure --prefix="$INSTALL_DIR" --disable-shared --enable-unicode \
    --enable-compat28 \
    --with-libjpeg=builtin --with-libpng=builtin --with-libtiff=no --with-expat=no \
    --with-zlib=builtin --disable-richtext \
    CFLAGS="-Os -fno-keep-inline-dllexport" CXXFLAGS="-Os -fno-keep-inline-dllexport"
  make
  make install

以下是如何在Windows上构建wxlua:

  cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DCMAKE_BUILD_TYPE=MinSizeRel -DBUILD_SHARED_LIBS=FALSE \
    -DwxWidgets_CONFIG_EXECUTABLE="$INSTALL_DIR/bin/wx-config" \
    -DwxWidgets_COMPONENTS="stc;html;aui;adv;core;net;base" \
    -DwxLuaBind_COMPONENTS="stc;html;aui;adv;core;net;base" -DwxLua_LUA_LIBRARY_USE_BUILTIN=FALSE \
    -DwxLua_LUA_INCLUDE_DIR="$INSTALL_DIR/include" -DwxLua_LUA_LIBRARY="$INSTALL_DIR/lib/lua51.dll" .
  (cd modules/luamodule; make)
  (cd modules/luamodule; make install/strip)

您需要更新wxlua构建指令,以使用Lua5.2而不是我使用的Lua5.1。

我在此存储库中拥有可用的构建脚本,适用于WindowsOSXLinux,已在最新的wxwidgets和wxlua版本上进行了测试(使用这两个存储库的源代码)。它们生成一个wxlua库,与Lua dll链接(在Windows上),因此这不完全是您可能要寻找的静态配置,但具有静态构建可能会防止您加载其他Lua库(除非您导出正确的符号并提供代理DLL,就像这里描述的那样),因此我不建议使用这种配置。

此外,我仍在使用Lua5.1与wxlua和wxwidgets,因为这使我可以使用LuaJIT作为替代选择,在某些情况下获得更好的性能。如果您使用Lua 5.2编译wxlua,则无法使用此选项,因为它们的ABI不同。

在与您自己的基于C ++的工具包集成方面,最好的选项可能是将其公开为Lua库,然后从wxlua应用程序中加载它,就像加载任何其他库一样,因为它允许您将组件相互独立。

2015-04-12 20:37:12