编译wxLua(跨平台和静态)
Compiling wxLua (cross-platform & static)
我计划创建一个新的C++项目,在其中编写一些C++函数,在其中嵌入一个带有wxLua的Lua引擎,使我的C/C++函数可用于Lua端,然后在Lua中编写我的主程序(包括GUI)。
我的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(?)哪些库用于哪个操作系统?
以下是我如何在Windows/OSX/Linux上为我的跨平台项目编译wxwidgets/wxlua的说明,但我使用的是gcc/mingw-tdm,而不是Code::Blocks,因此您可能需要将它们适应您的环境。
以下是如何在Windows:上构建wxWidget
./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。
我在这个存储库中有用于Windows、OSX和Linux的构建脚本。这些脚本已经在最新的wxwidgets和wxlua版本上进行了测试(使用这两个存储库的主干)。它们生成一个链接到Lua dll的wxlua库(在Windows上),所以它不是你可能想要的静态配置,但静态构建可能会阻止你加载其他Lua库(除非你导出正确的符号并提供此处所述的代理dll),所以我不推荐这种配置。
此外,我仍然使用带有wxlua和wxwidgets的Lua5.1,因为这使我可以使用LuaJIT作为替代品,在某些情况下获得更好的性能。如果你用Lua 5.2编译wxlua,你就没有这个选项了,因为它们的ABI不同。
就与您自己的基于C++的工具包的集成而言,最好的选择可能是将其公开为Lua库,并像加载任何其他库一样从wxlua应用程序加载,因为它允许您保持组件之间的独立性。
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 使用gcc从静态链接的文件中查找可选符号
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 如何在C++中使用非静态成员函数作为回调函数
- 通过网络、跨平台传递std::变体是否安全
- 将静态库链接到不带-fPIC的共享库中
- 编译wxLua(跨平台和静态)
- 在iOS和Android上跨平台使用静态.a库可能吗?(那么.so和.dylib呢?)
- 构建C++跨平台静态库