Page 1 of 5

Compiling Minetest on Windows

Posted: Wed Mar 28, 2012 18:50
by bgsmithjr
EDIT: You will also need OpenAL for sound support:
http://connect.creativelabs.com/openal/ ... Items.aspx

Code: Select all

Compiling on Windows:
---------------------

- You need:
    * CMake:
        [url]http://www.cmake.org/cmake/resources/software.html[/url]
    * MinGW or Visual Studio
        [url]http://www.mingw.org[/url]/
        [url]http://msdn.microsoft.com/en-us/vstudio/default[/url]
    * Irrlicht SDK 1.7:
        [url]http://irrlicht.sourceforge.net/downloads.html[/url]
    * Zlib headers (zlib125.zip)
        [url]http://www.winimage.com/zLibDll/index.html[/url]
    * Zlib library (zlibwapi.lib and zlibwapi.dll from zlib125dll.zip):
        [url]http://www.winimage.com/zLibDll/index.html[/url]
    * Optional: gettext bibrary and tools:
        [url]http://gnuwin32.sourceforge.net/downlinks/gettext.php[/url]
        - This is used for other UI languages. Feel free to leave it out.
HERE * Libvorbis 1.3.3
                DLL=[url]http://www.dll-files.com/dllindex/dll-files.shtml?libvorbis[/url]
                INCLUDE=[url]http://xiph.org/downloads/[/url]
HERE  *Libvorbisfile
                DLL=[url]http://www.dll-files.com/dllindex/dll-files.shtml?libvorbisfile[/url]
                INCLUDE=libvorbis/include
HERE *Libogg
                INCLUDE=[url]http://xiph.org/downloads/[/url]
                DLL= [url]http://www.dlldump.com/download-dll-files_new.php/dllfiles/L/libogg.dll/-/download.html[/url]
    * And, of course, Minetest-c55:
        [url]http://c55.me/minetest/download[/url]
- Steps:
    - Select a directory called DIR hereafter in which you will operate.
    - Make sure you have CMake and a compiler installed.
    - Download all the other stuff to DIR and extract them into there.
      ("extract here", not "extract to packagename/")
      NOTE: zlib125dll.zip needs to be extracted into zlib125dll
    - All those packages contain a nice base directory in them, which
      should end up being the direct subdirectories of DIR.
    - You will end up with a directory structure like this (+=dir, -=file):
    -----------------
+ DIR
                              - oalinst.exe
        - zlib-1.2.5.tar.gz
        - zlib125dll.zip
        - irrlicht-1.7.1.zip
                - libvorbis-1.3.3.zip
                - libogg-1.3.0.zip
        - 110214175330.zip (or whatever, this is the minetest source)
        + zlib-1.2.5
            - zlib.h
            + win32
            ...
        + zlib125dll
            - readme.txt
            + dll32
            ...
        + irrlicht-1.7.1
            + lib
            + include
            ...
HERE  + libvorbis-1.3.3.zip
                       + lib
                       + include
                         ...
HERE + libogg-1.3.0.zip
                       + lib
                       + include
                         ...
        + gettext (optional)
            +bin
            +include
            +lib
        + minetest
            + src
            + doc
            - CMakeLists.txt
            ...
    -----------------
    - Start up the CMake GUI
    - Select "Browse Source..." and select DIR/minetest
    - Now, if using MSVC:
        - Select "Browse Build..." and select DIR/minetest-build
    - Else if using MinGW:
        - Select "Browse Build..." and select DIR/minetest
    - Select "Configure"
    - Select your compiler
    - It will warn about missing stuff, ignore that at this point. (later don't)
    - Make sure the configuration is as follows
      (note that the versions may differ for you):
-------------------------------------------------------------
        BUILD_CLIENT                         [X]
    BUILD_SERVER                       [  ]
    CMAKE_BUILD_TYPE             Release
    CMAKE_INSTALL_PREFIX     DIR/minetest-install
    IRRLICHT_SOURCE_DIR       DIR/irrlicht-1.7.1
    RUN_IN_PLACE                        [X]
    WARN_ALL                                 [  ]
    ZLIB_DLL                                    DIR/zlib125dll/dll32/zlibwapi.dll
    ZLIB_INCLUDE_DIR                 DIR/zlib-1.2.5
    ZLIB_LIBRARIES                       DIR/zlib125dll/dll32/zlibwapi.lib
HERE  LIBVORBIS_INCLUDE_DIR    DIR/libvorbis-1.3.3/include
HERE LIBVORBIS_LIBRARIES           DIR/libvorbis.dll
HERE  LIBVORBISFILE_INCLUDE_DIR    DIR/libvorbis-1.3.3/include
HERE  LIBVORBISFILE_LIBRARIES           DIR/libvorbisfile.dll
HERE  LIBOGG_INCLUDE_DIR          DIR/libogg-1.3.0/include
HERE  LIBOGG_LIBRARIES                DIR/libogg.dll
    GETTEXT_BIN_DIR                  DIR/gettext/bin
    GETTEXT_INCLUDE_DIR       DIR/gettext/include
    GETTEXT_LIBRARIES             DIR/gettext/lib/intl.lib
    GETTEXT_MSGFMT                 DIR/gettext/bin/msgfmt
OPENAL_INCLUDE_DIR=C:\Program Files (x86)\OpenAL\include
OPENAL_LIBRARIES=C:\Program Files (x86)\OpenAL\lib\OpenAL32.lib
- Hit "Configure"
    - Hit "Configure" once again 8)
    - If something is still coloured red, you have a problem.
    - Hit "Generate"
    If using MSVC:
        - Open the generated minetest.sln
        - The project defaults to the "Debug" configuration. Make very sure to
          select "Release", unless you want to debug some stuff (it's slower
          and might not even work at all)
        - Build the ALL_BUILD project
        - Build the INSTALL project
        - You should now have a working game with the executable in
            DIR/minetest-install/bin/minetest.exe
        - Additionally you may create a zip package by building the PACKAGE
          project.
    If using MinGW:
        - Using the command line, browse to the build directory and run 'make'
          (or mingw32-make or whatever it happens to be)
        - You may need to copy some of the downloaded DLLs into bin/, see what
          running the produced executable tells you it doesn't have.
        - You should now have a working game with the executable in
            DIR/minetest/bin/minetest.exe

Windows releases of minetest are built using a bat script like this:
--------------------------------------------------------------------

set sourcedir=%CD%
set installpath="C:\tmp\minetest_install"
set irrlichtpath="C:\tmp\irrlicht-1.7.2"

set builddir=%sourcedir%\bvc10
mkdir %builddir%
pushd %builddir%
cmake %sourcedir% -G "Visual Studio 10" -DIRRLICHT_SOURCE_DIR=%irrlichtpath% -DRUN_IN_PLACE=1 -DCMAKE_INSTALL_PREFIX=%installpath%
if %errorlevel% neq 0 goto fail
"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" ALL_BUILD.vcxproj /p:Configuration=Release
if %errorlevel% neq 0 goto fail
"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" INSTALL.vcxproj /p:Configuration=Release
if %errorlevel% neq 0 goto fail
"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" PACKAGE.vcxproj /p:Configuration=Release
if %errorlevel% neq 0 goto fail
popd
echo Finished.
exit /b 0

:fail
popd
echo Failed.
exit /b 1

Posted: Wed Mar 28, 2012 19:12
by Jordach
thanKs dude!

Posted: Wed Mar 28, 2012 19:13
by bgsmithjr
no problem

Posted: Wed Mar 28, 2012 21:09
by Gilli
Hello bgsmithjr,

I love you !

Posted: Thu Mar 29, 2012 00:18
by bgsmithjr
Added dll downloads

Posted: Thu Mar 29, 2012 13:46
by bgsmithjr
Also, if using visual studio you'll want to go to the solution explorer, right click the minetest project, goto properties,on the left treeview, expand Linker, then click input, then on the right side, in the field Ignore Specific Default Libraries add

libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

Also, while using cmake-gui I noticed it is passing /MD, but on visual studio it passes /MT, you can change that by opening the properties of the minetest project expaning C++ on the right, then selecting Code Generation, changing the runtime library field to Multi-Threaded DLL(/MD)

http://msdn.microsoft.com/en-us/library ... S.60).aspx

Posted: Sat Mar 31, 2012 13:05
by Utilisatrice
Hi Bgsmithjr,

Can you help me please ?

C:\Users \****\Desktop\Minetest\libvorbisfile.dll : fatal error LNK1107: invalid or corrupt file: can not read 0x2B8

I have just this error.

Posted: Sat Mar 31, 2012 13:15
by bgsmithjr
I don't use the dll, I just the .lib file. You can compile it yourself using cmake gui.
Here is what I use.
http://www.filedropper.com/libvorbisfilestatic

Posted: Sat Mar 31, 2012 13:50
by Utilisatrice
Thank, but now :

C:\Users\****\Desktop\Minetest\libvorbis.dll : fatal error LNK1107: invalid or corrupt file : can not read 0x240.

:'(.

EDIT : When I Use libvorbis.lib there is :

C:\Users\****\Desktop\Minetest\libogg.dll : fatal error LNK1107: invalid or corrupt file : can not read 0x278

Posted: Sat Mar 31, 2012 15:22
by bgsmithjr
here are replacements for libogg, libvorbis, and libvorbisfile dlls
http://www.filedropper.com/minetest

Posted: Sat Mar 31, 2012 15:32
by Utilisatrice
Thank, but I often change and I compile the sources.

You could give me the libs that you use please ?

Posted: Sat Mar 31, 2012 15:34
by bgsmithjr
I just did in my last post, those are just the libs, sorry for naming minetest.zip

Posted: Sat Mar 31, 2012 16:00
by Utilisatrice

Code: Select all

>LINK : warning LNK4075: ' /INCREMENTAL' ignoré à cause de la spécification '/LTCG'
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: __errno déjà défini(e) dans LIBCMT.lib(dosmap.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _malloc déjà défini(e) dans LIBCMT.lib(malloc.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _realloc déjà défini(e) dans LIBCMT.lib(realloc.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _free déjà défini(e) dans LIBCMT.lib(free.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fseek déjà défini(e) dans LIBCMT.lib(fseek.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _calloc déjà défini(e) dans LIBCMT.lib(calloc.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _ftell déjà défini(e) dans LIBCMT.lib(ftell.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fclose déjà défini(e) dans LIBCMT.lib(fclose.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fread déjà défini(e) dans LIBCMT.lib(fread.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fopen déjà défini(e) dans LIBCMT.lib(fopen.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _toupper déjà défini(e) dans LIBCMT.lib(toupper.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _ceil déjà défini(e) dans LIBCMT.lib(_ceil_pentium4_.obj)
2>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _exit déjà défini(e) dans LIBCMT.lib(crt0dat.obj)
2>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) déjà défini(e) dans LIBCMT.lib(typinfo.obj)
2>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) déjà défini(e) dans LIBCMT.lib(typinfo.obj)
2>     Création de la bibliothèque C:/Users/****/Desktop/Minetest/celeron55-minetest-96ee73f/bin/Release/minetest.lib et de l'objet C:/Users/****/Desktop/Minetest/celeron55-minetest-96ee73f/bin/Release/minetest.exp
2>LINK : warning LNK4098: conflit entre la bibliothèque par défaut 'MSVCRT' et les autres bibliothèques ; utilisez /NODEFAULTLIB:library
2>C:\Users\****\Desktop\Minetest\celeron55-minetest-96ee73f\bin\Release\minetest.exe : fatal error LNK1169: un ou plusieurs symboles définis à différentes reprises ont été rencontrés
:'(, I don't understand.

Posted: Sat Mar 31, 2012 16:07
by Jordach
From what google gives me, it seems to be MSVCRT.dll.

Update by searching "vcredist.exe" on Microsoft's website.

Posted: Sat Mar 31, 2012 16:08
by bgsmithjr
Oh sorry, you have to go the solution explorer on the left hand side, select the project 'minetest', then expand Linker, then choose input, then on the right hand side there should be something that says 'Ignore specific default libraries' in that box put.
libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

Posted: Sat Mar 31, 2012 16:12
by Utilisatrice
Hi Jordach,

I download "Vcredist.exe" and after installation, it had no effect, still the same error.

Posted: Sat Mar 31, 2012 16:31
by Jordach
Strange, it worked for me without following instructions....

Posted: Sat Mar 31, 2012 16:37
by Utilisatrice
Thank but now :

Création de la bibliothèque C:/Users/****/Desktop/Minetest/celeron55-minetest-96ee73f/bin/Release/minetest.lib et de l'objet C:/Users/****/Desktop/Minetest/celeron55-minetest-96ee73f/bin/Release/minetest.exp
2>lua.lib(lmathlib.obj) : error LNK2001: unresolved external symbol __HUGE
2>C:\Users\****\Desktop\Minetest\celeron55-minetest-96ee73f\bin\Release\minetest.exe : fatal error LNK1120: 1 unresolved externals

xD.

Posted: Sat Mar 31, 2012 17:07
by bgsmithjr
select the main project select clean, then rebuild and if that doesnt work change solution explorer->c/c++ -->code generation, on the right side runtime library field->value='/MT' multi-threaded, to '/MD Mult-threaded DLL'

Posted: Sat Mar 31, 2012 17:54
by Utilisatrice
Doesn't work :(.

Posted: Sat Mar 31, 2012 18:35
by bgsmithjr
I will need more information, if you start from the beginning with the unmodified source and tell me what you do in steps, I could help but I have too little of information to help you any more, now.

Posted: Sat Mar 31, 2012 18:44
by Utilisatrice
I do like you said but in the end, I still have the same error :

Code: Select all

------ Début de la génération : Projet : ZERO_CHECK, Configuration : Release Win32 ------
2>------ Début de la génération : Projet : minetest, Configuration : Release Win32 ------
2>LINK : warning LNK4075: ' /INCREMENTAL' ignoré à cause de la spécification '/LTCG'
2>     Création de la bibliothèque C:/Users/****/Desktop/Minetest/celeron55-minetest-7bfa2d4/bin/Release/minetest.lib et de l'objet C:/Users/****/Desktop/Minetest/celeron55-minetest-7bfa2d4/bin/Release/minetest.exp
2>lua.lib(lmathlib.obj) : error LNK2001: symbole externe non résolu __HUGE
2>C:\Users\****\Desktop\Minetest\celeron55-minetest-7bfa2d4\bin\Release\minetest.exe : fatal error LNK1120: 1 externes non résolus
3>------ Début de la génération : Projet : ALL_BUILD, Configuration : Release Win32 ------
3>  Build all projects
========== Génération : 2 a réussi, 1 a échoué, 3 mis à jour, 0 a été ignoré ==========

Posted: Sat Mar 31, 2012 18:47
by Calinou
Idea: you should make Windows binairies about the latest git and distribute them (update them daily/weekly).
That'd help a lot of people. Thanks. :)

Posted: Sat Mar 31, 2012 18:53
by Utilisatrice
When I delete:

lua_pushnumber (L, HUGE_VAL);

Line 255.

I can compile the game but when I try to enter the game, minetest crash.

EDIT : Calinou, sa servirait à rien, il y a pas mal de personnes qui modifie les sources de minetest pour pouvoir y inclure du contenu. Donc si on peu pas compiler les sources du jeu nous mêmes, ce serait compliquer on va pas déranger bgsmithjr à chaque fois.

Posted: Sat Mar 31, 2012 18:58
by Jordach
Calinou wrote:Idea: you should make Windows binairies about the latest git and distribute them (update them daily/weekly).
That'd help a lot of people. Thanks. :)
I agree. I can't use Linux since Acer don't provide me with drivers to run the bloddy damn thing, I am currently stuck with the version provided by bgsmithjr, and the second problem is, I can try to compile, but get lost at the MiniGW (OR MSVS STAGE.) I hope you could become the newest Windows package maker, and you do seem pretty nice I must admit.