编译wxLua(跨平台和静态)

For*_*vin 10 c++ lua gcc codeblocks wxlua

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

我的IDE /编译器是Windows上的Code :: Blocks/GCC.我想为Windows,Linux和OSX编译它.

我的问题:

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

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

如果可能的话,我希望程序最终成为一个独立的可执行文件.
所以我想我需要将Lua和wxWidgets编译为.lib库(Windows)和.a库(Linux/OSX),这是正确的吗?我该怎么办?

完成后,我需要创建什么样的项目以及如何将wxLua嵌入到该项目中?我找不到很多关于此的信息.

最后,我如何告诉我的IDE/project/makefile(?)哪些库用于哪个操作系统?

Pau*_*nko 5

以下是我在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
Run Code Online (Sandbox Code Playgroud)

这是你在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)
Run Code Online (Sandbox Code Playgroud)

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

我在这个存储库中Windows,OSXLinux编写了构建脚本.这些脚本已经在最新的wxwidgets和wxlua版本上进行了测试(使用两个存储库的中继).它们会生成一个与Lua dll链接的wxlua库(在Windows上),因此它可能不是您可能正在寻找的静态配置,但是静态构建可能会阻止您加载其他Lua库(除非您导出正确的符号并提供代理DLL如此处所述),所以我不建议配置.

另外,我仍然在使用带有wxlua和wxwidgets的Lua5.1,因为这允许我使用LuaJIT作为替代品以在某些情况下获得更好的性能.如果用Lua 5.2编译wxlua,因为它们的ABI不同,你就不会有这个选项.

在与您自己的基于C++的工具包集成方面,最佳选择可能是将其公开为Lua库,并在加载任何其他库时从wxlua应用程序加载,因为它允许您保持组件彼此独立.