From: <wxl...@sp...> - 2018-01-25 23:25:42
|
For Windows, there's a precompiled binary that works out of the box.But six month ago, I wanted to release a Linux version of one of my wxLua project.wxLua is too a tiny project to enter a well maintained package repository, so I had to rebuild from source.It took me a whole day, from 6 to 22, without even that much pause inbetween.While I won't doubt more clever folk could do it more easily, for the record I felt like sharing how I eventually managed: How to compile wxLua for Linux, as of 27/05/2017:Tested under a mostly fresh Linux Mint 17.1 Rebecca Get some tools: Compiler: sudo apt-get install gcc sudo apt-get install g++ Source control: sudo apt-get install git sudo apt-get install svn Text editor: notepadqq is the closest clone of notepad++ (which is my favorite Windows editor): sudo add-apt-repository ppa:notepadqq-team/notepadqq sudo apt-get update sudo apt-get install notepadqq Some diffing tool: sudo apt-get install meld Get the build dependencies: To build lua: sudo apt-get install libreadline-dev sudo apt-get install libncurses5-dev To build wxWidgets sudo apt-get install libgtk2.0-dev And maybe (but best not to even try "media"): sudo apt-get install gstreamer1.0 sudo apt-get install libgstreamer1.0-dev sudo apt-get install libgstreamer-plugins-base1.0-dev Prolly not needed, but somebody mentioned them: libgconf2-dev libgconfmm2.6-devel wxLua already contains source of Lua 5.1 and Lua 5.2, but if you want to get Lua source from a more official source: download .tar.gz from https://www.lua.org/ftp/ untargz, and: make linux To test Lua: cd ./src/lua print(_VERSION) -- or whatever Lua command os.exit() -- or plain CTRL+C Get and build wxWidgets 3.1.0 svn checkout http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk wxWidgets-src As of now, it's revision 78524, so, the same as: svn checkout -r 78524 http://svn.wxwidgets.org/svn/wx/wxWidgets/trunk wxWidgets-src These other source also exist but I didn't use them svn checkout http://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH wxWidgets-2.8 git clone https://github.com/wxWidgets/wxWidgets.git It's best to build in a subfolder rather than in root: cd wxWidgets-src mkdir buildgtk cd buildgtk Build (well, configure) with: ../configure --with-gtk --disable-shared --enable-compat28 --enable-stc --enable-richtext --enable-clipboard --with-libpng=builtin --with-zlib=builtin --with-expat=builtin To list all possible options: ../configure --help Do not forget --enable-compat28 that is important for wxLua, or else it can't find some function Do not forget --with-libpng=builtin or it'll fail on newer Ubuntu that don't ship with libpng12.so but libpng16-16.so Do not use --enable-monolithic that cause weird issue later when linking with wxLua (ex: https://forums.wxwidgets.org/viewtopic.php?t=33364 ) Do not use --enable-mediactrl, not only it has many dependencies (gstreamer), but even they're all installed, there are issues at a later stage Build (actually build) with: sudo make install sudo ldconfig You can check version with: wx-config --version Get and build wxLua: svn checkout https://wxlua.svn.sourceforge.net/svnroot/wxlua/trunk/wxLua wxLua-src As of now, it's revision 252, so, the same as: svn checkout -r 252 https://svn.code.sf.net/p/wxlua/svn/trunk/wxLua wxLua-src There is also a more recent, which I didn't dare to try: git clone https://github.com/pkulchenko/wxlua.git Make a sym link from /modules/lua-5.1/ into /modules/lua/ cd modules ln -s lua-5.1 lua cd .. Plain copy the include of lua to wxLua cause it can't find them from /modules/lua/src/ to /modules/wxlua so: cp modules/lua/src/*.h modules/wxlua/ In /wxLua-src/build/Makefile_wx-config.in Remove media from line 54: WXLIBS_NAMES = stc,gl,media,aui,xrc,qa,html,adv,core,xml,net,base changed to: WXLIBS_NAMES = stc,gl,aui,xrc,qa,html,adv,core,xml,net,base Comment the first APPEXTRALIBS and modify the second to remove STC_LIB and WXXRC_LIB: APPEXTRALIBS := -L$(WXLIB_DIR) $(WXLIB_DIR)/lib$(WXLUA_LIB).a $(LUA_LIBS) Note: you can see that they are missing by using in that makefile*.in stuff like $(info WXLIB_DIR=$(WXLIB_DIR)) $(info WXLUA_LIB=$(WXLUA_LIB)) $(info STC_LIB=$(STC_LIB)) $(info WXXRC_LIB=$(WXXRC_LIB)) $(info LUA_LIBS=$(LUA_LIBS)) Start compiling (from wxLua-src) make -f Makefile.wx-config If fails to finds its own libwxlua_*.a Well, plain copy them where it looks for them: sudo cp lib/*.a /usr/local/lib/ Retry make -f Makefile.wx-config It fails. Compile wxluafreeze_app specifically, as it's all that really matters: make -f Makefile.wx-config wxluafreeze_app It fails to find all the .o it needs, with lots of undefined reference to wxLuaBinding_wx*_init() But it gives us the g++ commandline to build it! So, modify it to point it to where they are: cd apps/wxluafreeze/ g++ -o wxLuaFreeze *.o ../../modules/wxbind/src/*.o ../../modules/wxlua/debugger/*.o ../../modules/wxlua/debug/*.o -L/usr/local/lib -pthread /usr/local/lib/libwx_gtk2u_stc-3.1.a /usr/local/lib/libwx_gtk2u_gl-3.1.a /usr/local/lib/libwx_gtk2u_aui-3.1.a /usr/local/lib/libwx_gtk2u_xrc-3.1.a /usr/local/lib/libwx_gtk2u_qa-3.1.a /usr/local/lib/libwx_baseu_net-3.1.a /usr/local/lib/libwx_gtk2u_html-3.1.a /usr/local/lib/libwx_gtk2u_adv-3.1.a /usr/local/lib/libwx_gtk2u_core-3.1.a /usr/local/lib/libwx_baseu_xml-3.1.a /usr/local/lib/libwx_baseu-3.1.a -lwxscintilla-3.1 -lGL -lGLU -pthread -lgthread-2.0 -lX11 -lXxf86vm -lSM -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lgobject-2.0 -lglib-2.0 -lfreetype -lpng -lexpat -lwxregexu-3.1 -lwxtiff-3.1 -lwxjpeg-3.1 -lz -ldl -lm -ldl -Wl,--rpath -Wl,/home/bob/wxLua/wxLua-src/lib -L/usr/local/lib /usr/local/lib/libwxlua_gtk2u_wxlua-3.1.a ../../lib/liblua.a /usr/local/lib/libwxpng-3.1.a Hopefully at this point you have just succesfully compiled wxLuaFreeze Get the wxLuaFreeze from /wxLua-src/apps/wxlua Try it alone ./wxLuaFreeze Try it with a script: ./wxLuaFreeze KPL_vXX.wx.lua But then when you try with a script appended at the end of wxLuaFreeze nothing happens To fix that, edit wxluafreeze.cpp to use some wxString::From8BitData(..) when creating a wxString from the const char* Also, newer Ubuntu use libpng16-16 instead of libpng12.so, so to fix that: add --with-libpng=builtin to wxWidgets ./configure add /usr/local/lib/libwxpng-3.1.a to the g++ compile of wxLuaFreeze When cleaning up, please note that parts of wxWidgets and wxLua are installed in /usr/local/lib/ which cannot be written by regular user. To get a root explorer use something like: sudo nemo To verify the shared library used by an executable: ldd ./wxLuaFreeze |