Kompilace 32-bit MaNGOSu na 64-bit Linuxu: Porovnání verzí
(LDFLAGS jako export) |
(související) |
||
Řá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= | |
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 43: | Řádek 43: | ||
</pre> | </pre> | ||
− | + | =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 49: | Řá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] |
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::unloadMapzjiš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.