Компиляция wxLua (межплатформенная и статическая)

Я планирую создать новый проект на С++, написать в нем некоторые функции С++, вставить в него движок Lua с wxLua, сделать мои функции C/С++ доступными для Lua, а затем написать мою основную программу (включая GUI) в Lua.

Мой IDE/компилятор - Code:: Blocks/GCC в Windows. Я хочу скомпилировать его для Windows, Linux и OSX.

Мои проблемы:

  • компиляция wxWidgets и Lua
  • здание wxLua
  • создание кросс-платформенного проекта, который знает, какие библиотеки использовать, для которых OS

Я прочитал много документации по wxLua и обнаружил, что вам, вероятно, следует использовать wxWidgets 2.8.12 и Lua 5.2.3 (так как они являются двумя последними стабильными и поддерживаемыми версиями).

Если возможно, я хотел бы, чтобы программа была автономным исполняемым файлом в конце.
Так что, я думаю, мне нужно скомпилировать Lua и wxWidgets, поскольку библиотеки .lib(Windows) и .a(Linux/OSX) - это правильно? Как мне это сделать?

Как только это будет сделано, какой проект мне нужно создать, и как бы вставлять wxLua в этот проект? Я не мог найти много информации об этом.

И, наконец, как я могу сообщить свой IDE/project/makefile (?), какие библиотеки использовать для какой ОС?

Ответ 1

Вот мои инструкции о том, как я компилирую wxwidgets/wxlua в Windows/OSX/Linux для моего кросс-платформенного проекта, но я использую gcc/mingw-tdm, а не Code:: Blocks, поэтому вам может понадобиться адаптировать их к вашей среды.

Вот как вы можете создавать wxwidgets в Windows:

  ./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

Вот как вы можете создать wxlua в Windows:

  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 (используйте соединительные линии обоих репозиториев). Они генерируют одну библиотеку wxlua, связанную с dll Lua (в Windows), так что это не совсем статическая конфигурация, которую вы можете искать, но статическая сборка может помешать вам загружать другие библиотеки Lua (если вы не экспортируете соответствующие символы и не предоставляете прокси-библиотеку DLL как описанный здесь), поэтому я не рекомендую эту конфигурацию.

Кроме того, я по-прежнему использую Lua5.1 с wxlua и wxwidgets, так как это позволяет мне использовать LuaJIT в качестве замены для замены в некоторых случаях. У вас не будет этой опции, если вы скомпилируете wxlua с Lua 5.2, поскольку их ABI отличается.

С точки зрения интеграции с вашим собственным инструментарием на основе С++, лучший вариант, вероятно, выставляет его как библиотеку Lua и загрузку из приложения wxlua, поскольку вы загружаете любую другую библиотеку, так как это позволяет вам сохранять ваши компоненты независимыми от каждого другие.