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

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

Моя 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 / project / makefile (?), Какие библиотеки использовать для какой ОС?

10

Решение

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

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

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

5

Другие решения


По вопросам рекламы [email protected]