Kompilace 32-bit MaNGOSu na 64-bit Linuxu: Porovnání verzí

Z WoWResource Wiki
Přejít na: navigace, hledání
(Přidání odkazu na diskusi.)
(související)
 
(Nejsou zobrazeny 2 mezilehlé verze od 2 dalších uživatelů.)
Řádek 3: Řádek 3:
 
Počítačová platforma není dána pouze architekturou procesoru jako i386, i686, athlon64, c2d, atd.), ale také velikostí použitých registrů a adres (32-bit, 64-bit). Proto i v případě změny datové šířky registrů se jedná o tzv. cross compiling neboli křížové překládání. To lze popsat jako překlad aplikace pro jednu platformu na jiné.
 
Počítačová platforma není dána pouze architekturou procesoru jako i386, i686, athlon64, c2d, atd.), ale také velikostí použitých registrů a adres (32-bit, 64-bit). Proto i v případě změny datové šířky registrů se jedná o tzv. cross compiling neboli křížové překládání. To lze popsat jako překlad aplikace pro jednu platformu na jiné.
  
==Jak na to==
+
=Jak na to=
  
 
Předpokládejme, že používáme 64-bit distribuci Fedora (aktuálně verze 8). Tato distribuce umožňuje běh jak 32-bit tak 64-bit aplikací a při instalaci knihoven z oficiálních balíčkových repozitářů se instalují obě verze. V systému jsou binární knihovny umístěny samostatně v adresářích /lib a /lib64 a knihovny ve zdrojové podobě v adresářích /usr/lib a /usr/lib64.
 
Předpokládejme, že používáme 64-bit distribuci Fedora (aktuálně verze 8). Tato distribuce umožňuje běh jak 32-bit tak 64-bit aplikací a při instalaci knihoven z oficiálních balíčkových repozitářů se instalují obě verze. V systému jsou binární knihovny umístěny samostatně v adresářích /lib a /lib64 a knihovny ve zdrojové podobě v adresářích /usr/lib a /usr/lib64.
Řádek 34: Řádek 34:
 
export CXXFLAGS="-march=athlon64 -m32 -O2 -g -pipe -msse3 -ggdb -fno-strength-reduce -fno-delete-null-pointer-checks -fno-strict-aliasing -frename-registers"
 
export CXXFLAGS="-march=athlon64 -m32 -O2 -g -pipe -msse3 -ggdb -fno-strength-reduce -fno-delete-null-pointer-checks -fno-strict-aliasing -frename-registers"
 
export LIBS="-L/usr/lib/mysql"
 
export LIBS="-L/usr/lib/mysql"
 +
export LDFLAGS="-m32 -L/usr/lib"
  
 
autoreconf --install --force
 
autoreconf --install --force
./configure --prefix=/opt/mangos --sysconfdir=/opt/mangos/etc --with-python --enable-cli --enable-ra --datadir=/opt/mangos LDFLAGS="-m32 -L/usr/lib"
+
./configure --prefix=/opt/mangos --sysconfdir=/opt/mangos/etc --with-python --enable-cli --enable-ra --datadir=/opt/mangos
 
#make clean
 
#make clean
 
make
 
make
Řádek 42: Řádek 43:
 
</pre>
 
</pre>
  
==Přínos==
+
=Přínos=
  
 
Emulátor MaNGOS nepodporuje správně 64-bit platformy. Přesněji jedná se o knihovny G3D použité pro výpočty funkce Line-of-sight a práce s vmap soubory. Tato nekompatibilita způsobuje časté selhávání serveru a jeho ukončování obecnou chybou Segmentation fault. Konkrétně se jedná o chybu  
 
Emulátor MaNGOS nepodporuje správně 64-bit platformy. Přesněji jedná se o knihovny G3D použité pro výpočty funkce Line-of-sight a práce s vmap soubory. Tato nekompatibilita způsobuje časté selhávání serveru a jeho ukončování obecnou chybou Segmentation fault. Konkrétně se jedná o chybu  
Řádek 48: Řádek 49:
 
Vypnutí vmap jako funkce je nežádoucí a tak zkompilování jako 32-bit aplikace řeší uspokojivě tento problém, čímž se v jednom případě zvýšil uptime serveru z 3-5 hodin na 20-30 hodin při špičkově až 140 hráči online.
 
Vypnutí vmap jako funkce je nežádoucí a tak zkompilování jako 32-bit aplikace řeší uspokojivě tento problém, čímž se v jednom případě zvýšil uptime serveru z 3-5 hodin na 20-30 hodin při špičkově až 140 hráči online.
  
==Externí odkazy==
+
=Související=
 +
 
 +
[[MaNGOS pod Linuxem]]
 +
 
 +
=Externí odkazy=
  
 
* [http://www.wowresource.eu/index.php?showtopic=7372 Diskuse k tomuto návoud na wowresource.eu]
 
* [http://www.wowresource.eu/index.php?showtopic=7372 Diskuse k tomuto návoud na wowresource.eu]
  
 
* [http://www.mangosproject.org/forum/index.php?showtopic=18660 Související diskuse na fóru mangosproject.org]
 
* [http://www.mangosproject.org/forum/index.php?showtopic=18660 Související diskuse na fóru mangosproject.org]
 +
 +
[[Kategorie:MaNGOS Problémy]]

Aktuální verze z 18. 6. 2009, 20:48

Opěrační systém GNU/Linux a překladač GNU/gcc umožňují běh 32-bit alikací na 64-bit systému. To se může hodit v případě, kdy daná aplikace správně nepodporuje 64-bit platformu jako je to v případě WoW emulátoru MaNGOS. Přitom rozdíl ve výkonu 32-bit a 64-bit aplikací není nijak výrazný a hlavní výhodou použití 64-bit systému zůstává možnost adresovat více než 4 GB fyzické operační paměti.

Počítačová platforma není dána pouze architekturou procesoru jako i386, i686, athlon64, c2d, atd.), ale také velikostí použitých registrů a adres (32-bit, 64-bit). Proto i v případě změny datové šířky registrů se jedná o tzv. cross compiling neboli křížové překládání. To lze popsat jako překlad aplikace pro jednu platformu na jiné.

Jak na to

Předpokládejme, že používáme 64-bit distribuci Fedora (aktuálně verze 8). Tato distribuce umožňuje běh jak 32-bit tak 64-bit aplikací a při instalaci knihoven z oficiálních balíčkových repozitářů se instalují obě verze. V systému jsou binární knihovny umístěny samostatně v adresářích /lib a /lib64 a knihovny ve zdrojové podobě v adresářích /usr/lib a /usr/lib64. Dále potřebujeme mít zdrojové kódy MaNGOSu, které lze stáhnout z SVN repozitáře.

Vycházejme z následujícího kompilačního skriptu:

#!/bin/sh
cd trunk
export CFLAGS="-march=athlon64 -m64 -O2 -g -pipe -msse3 -ggdb -fno-strength-reduce -fno-delete-null-pointer-checks -fno-strict-aliasing -frename-registers"
export CXXFLAGS="-march=athlon64 -m64 -O2 -g -pipe -msse3 -ggdb -fno-strength-reduce -fno-delete-null-pointer-checks -fno-strict-aliasing -frename-registers"

autoreconf --install --force
./configure --prefix=/opt/mangos --sysconfdir=/opt/mangos/etc --with-python --enable-cli --enable-ra --datadir=/opt/mangos
#make clean
make
make install

Tento skript obsahuje nastavení pro překlad do 64-bit verze a plno dalších nastavení, které nás v tuto chvíli nezajímají. Pokud chceme provést překlad 32-bit verze jsou por nás podstatné tyto změny:

  • Musíme změnit parametr -m64 na -m32, který přímo určuje bitovou šířku adresování paměti.
  • Musíme přidat do řádku s příkazem configure cestu k umístění 32-bit knihoven a tedy doplnit na konec text LDFLAGS="-m32 -L/usr/lib".
  • Je potřeba přidat před povel configure řádek export LIBS="-L/usr/lib/mysql", který určí umístění 32-bit knihoven mysql klienta.

Po provedení změn skript vypadá takto:

#!/bin/sh
cd trunk
export CFLAGS="-march=athlon64 -m32 -O2 -g -pipe -msse3 -ggdb -fno-strength-reduce -fno-delete-null-pointer-checks -fno-strict-aliasing -frename-registers"
export CXXFLAGS="-march=athlon64 -m32 -O2 -g -pipe -msse3 -ggdb -fno-strength-reduce -fno-delete-null-pointer-checks -fno-strict-aliasing -frename-registers"
export LIBS="-L/usr/lib/mysql"
export LDFLAGS="-m32 -L/usr/lib"

autoreconf --install --force
./configure --prefix=/opt/mangos --sysconfdir=/opt/mangos/etc --with-python --enable-cli --enable-ra --datadir=/opt/mangos
#make clean
make
make install

Přínos

Emulátor MaNGOS nepodporuje správně 64-bit platformy. Přesněji jedná se o knihovny G3D použité pro výpočty funkce Line-of-sight a práce s vmap soubory. Tato nekompatibilita způsobuje časté selhávání serveru a jeho ukončování obecnou chybou Segmentation fault. Konkrétně se jedná o chybu

VMAP::MapTree::unloadMap
zjištěnou pomocí gdb (GNU Debugger).

Vypnutí vmap jako funkce je nežádoucí a tak zkompilování jako 32-bit aplikace řeší uspokojivě tento problém, čímž se v jednom případě zvýšil uptime serveru z 3-5 hodin na 20-30 hodin při špičkově až 140 hráči online.

Související

MaNGOS pod Linuxem

Externí odkazy