Portál AbcLinuxu, 10. května 2025 01:03

Dotaz: Jak lze vytvořit cross-compiler? host=build=i686 target=sparc64

29.8.2007 16:58 Andrej | skóre: 51 | blog: Republic of Mordor
Jak lze vytvořit cross-compiler? host=build=i686 target=sparc64
Přečteno: 878×
Odpovědět | Admin
Ahoj, zkoušel jsem vytvořit cross-compiler. Chtěl bych vytvářet na stroji i686-pc-linux-gnu binárky pro sparc64-unknown-linux-gnu. Existuje několik poměrně podrobných návodů: 1, 2, 3. Všechny mají několik společných vlastností:
  1. Nefungují.

  2. Jsou beznadějně zastaralé.

  3. Jsou nepřesné a nikde není seznam vstupních požadavků.

Postup podle návodu:

  1. Kompilace binutils pro sparc64 - OK, funguje.

  2. Kompilace základního GCC (nejspíš kvůli vytvoření důležitých knihoven) - selže. Někdy make & spol vygeneruje neplatný parametr -Q příkazu exec a překlad neúspěšně skončí. Jindy to hlásí C compiler cannot create executables. Oba případy se střídají náhodně.

    První problém rozhodně není moje chyba. Druhý problém jsem zkoušel řešit modifikací proměnné PATH i přidáním symlinků na nové binutils pro sparc64, avšak bezvýsledně.

  3. A další kroky už vůbec nemá cenu zkoušet.

Je snad nutné použít nějakou starou verzi GCC, která tyto chyby nemá?

Nemáte někdo s něčím podobným zkušenost? Víte o nějakém funkčním řešení? Správci distribucí cross-compiler nutně potřebují. Tedy jistě existuje způsob, jak GCC přeložit. Jen ho najít...

Předejdu otázce: Ne, nechci si stáhnout předpřipravené obrazy. Chci vědět, jak to funguje.

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Luboš Doležel (Doli) avatar 29.8.2007 17:53 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Jak lze vytvořit cross-compiler? host=build=i686 target=sparc64
Odpovědět | | Sbalit | Link | Blokovat | Admin
crossdev na Gentoo je jednoduchý a přitom funkční nástroj pro kompilaci crosskompilátorů. Použij Gentoo ;-) nebo se podívej, jak to dělá.
29.8.2007 20:21 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Jak lze vytvořit cross-compiler? host=build=i686 target=sparc64
Použij Gentoo ;-) nebo se podívej, jak to dělá.

Z obojího mám trochu obavy... Možná bych si mohl spustit pouze základní instalaci Gentoo ve VirtualBoxu nebo VMWare a pak odtamtud vzít hotovou binárku. Hlavně bych se rád dopídil toho, jak crossdev zajistí, aby kompilace fungovala. Asi používá starší verzi GCC. Aspoň u cross-compileru pro Win32, který jsem úspěšně vytvořil z PKGBUILDu přímo pod Archem, tomu tak bylo. Tam měli nějaké GCC 3.x a tím se pak znovu přeložilo výsledné GCC 4.x.

Luboš Doležel (Doli) avatar 29.8.2007 20:24 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Jak lze vytvořit cross-compiler? host=build=i686 target=sparc64
Hlavně bych se rád dopídil toho, jak crossdev zajistí, aby kompilace fungovala.
Mám tu i686-mingw 4.2.0 kompilované s x86-64 gcc 4.2.0, gcc 3.x to nepoužívá. Hlásí to tyto podrobnosti:

Configured with: /var/tmp/cross/i686-mingw32/portage/cross-i686-mingw32/gcc-4.2.0/work/gcc-4.2.0/configure --prefix=/usr --bindir=/usr/x86_64-pc-linux-gnu/i686-mingw32/gcc-bin/4.2.0 --includedir=/usr/lib/gcc/i686-mingw32/4.2.0/include --datadir=/usr/share/gcc-data/i686-mingw32/4.2.0 --mandir=/usr/share/gcc-data/i686-mingw32/4.2.0/man --infodir=/usr/share/gcc-data/i686-mingw32/4.2.0/info --with-gxx-include-dir=/usr/lib/gcc/i686-mingw32/4.2.0/include/g++-v4 --host=x86_64-pc-linux-gnu --target=i686-mingw32 --build=x86_64-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-libunwind-exceptions --disable-libmudflap --disable-libssp --disable-libgcj --with-arch=i686 --enable-languages=c,c++ --with-sysroot=/usr/i686-mingw32 --disable-bootstrap --disable-libgomp
30.8.2007 11:51 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Jak lze vytvořit cross-compiler? host=build=i686 target=sparc64

To znám, i686-mingw mám taktéž. Pro ArchLinux je na to v AUR přímo PKGBUILD, který tohle všechno udělá a vyplivne funkční překladač. Podstatný rozdíl oproti sparc64 je v tom, že knihovna mingw je úzce zaměřená na jednu platformu. Pro její zprovoznění s GCC není potřeba tolik triků jako v případě binutils a glibc.

30.8.2007 00:31 prOm3TheuS | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: Jak lze vytvořit cross-compiler? host=build=i686 target=sparc64
Odpovědět | | Sbalit | Link | Blokovat | Admin
Existuje kniha LFS (Linux From Scratch), která objasňuje jak si sestrojit Linux ze zdrojových kódů. Existuje však také oficiálně kniha CLFS (Cross Linux From Scratch), která píše o tom, jak si takový cross-compiler udělat a sestrojit tak ze zdrojových kódů operační systém pro jinou architekturu, než na které se kompiluje. A že jsem hodnej, tak tady je odkaz ;-) Ještě chci podotknout, že tenhle návod je ze SVN, takže je "teplej" tak pár hodin.
Your distro, your rules!
30.8.2007 11:46 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Jak lze vytvořit cross-compiler? host=build=i686 target=sparc64
A že jsem hodnej, tak tady je odkaz

Díky za odkaz. Tuto stránku jsem předtím nenašel ani po hodinovém hledání Googlem. Překvapuje mě, že na mě z Googlu nevyskočila jako první. Když zadám cross-compiler linux sparc64, nic relevantnějšího než tohle přece nemůže existovat. Pokud Google stránku nenajde, nejspíš na ni nevede dostatek odkazů. To mě překvapuje ještě víc.

Pokud jde o samotný návod, zběžně jsem ho pročetl až po samotnou kompilaci nového systému. Můj dojem z něj je takový, že je silně překomplikovaný a předimenzovaný. (Například vytváření celého nového diskového oddílu jen kvůli kompilaci mi připadá (mírně řečeno) matoucí. Oddíl na hostitelském počítači nemá s bootováním cílového stroje vůbec nic společného. Zabezpečit se dá stejně dobře i adresář.) To ale nic nemění na tom, že je nejspíš jediný svého druhu.

Příjemné je, že se tam přesně uvádí, jak se musí nastavit překlad GCC, aby fungoval. Je to mnohem složitější procedura, než jakou jsem předtím zkoušel. Nepříjemným faktem však zůstává, že každý kousek software je nutné kvůli specifickému nastavení zkompilovat zvlášť. Jinak řečeno - nelze prostě vzít build framework z ArchLinuxu a napasovat ho rychle a jednoduše na tento návod...

Mimochodem - tady je vidět velmi podstatný nedostatek ArchLinuxu ve srovnání se „staršími a zkušenějšími“ distribucemi - Debian, Gentoo, Fedora a podobně. Nelze prostě jen tak vzít strom ABS, něco někde přepnout a zkompilovat systém pro jinou architekturu. Přesněji řečeno, samozřejmě to možné je, ale při každé aktualizaci by člověk musel editovat všechny potřebné PKGBUILDy. (To ale koneckonců není příliš překvapivé - u některých distribucích pracují na portech pro non-PC architektury celé týmy lidí...)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.