Új hozzászólás Aktív témák

  • Jester01
    veterán

    nem teljesen értem ezt az egészet, de nem lehet, hogy assemblerből is kellene neki keresztfordítót megadni? mert ha valamelyik forrásban van asm betét, akkor ahhoz nem jó az x86-os asm.

    azért nem értem, mert a gcc elvileg tudja, hogy melyik kiterjesztést mivel kell fordítani, de gyakorlatilag mégse, mert akkor a CXX-et nem kellett volna beállítani.

    a march megadás megint nem tiszta nekem, a fordító egy architektúrára tud fordítani. annak nem kell. max. ifdef-ekhez kellhet...

    Minden bizonnyal a megfelelő assemblert hívja, mivel a gcc alapból is assembly kódot generál és már sikerült neki pár modult lefordítania. Az inline asm blokkokat még a gcc alakítja át és illeszti be az assembly kimenetbe. Az adott hibaüzenet még a gcc-től jön, mivel az assembler már nem tudná hogy a problémás kódrészlet asm blokk volt.

    A gcc valóban tudja mit mivel fordítson, de a makefile minden bizonnyal a szokásos CXX-re hivatkozott, ami ha nincs beállítva akkor az alapértelmezés szerint a natív fordító lesz. Itt pedig cross-compile van, ezért nem lett jó.

    Az "egy architektúra" az definíció kérdése - a "mips" fordító több alváltozatra tud fordítani, amelyek kisebb-nagyobb mértékben eltérhetnek. Hasonlóan az x86-os gcc is tud 32 és 64 bites kódot generálni, illetve megadható a kismillió különböző utasításkészlet bővítmény (sse és társai) is. Például ez a kis értelmetlen asm blokk:
    __asm__ __volatile__ ("nop" : : "x" (1.0));
    az alap 32 bites gcc-vel (vagy 64 bites esetén -m32 kapcsolóval) ilyen hibát dob:
    error: impossible constraint in 'asm'
    Ha bekapcsolod az sse támogatást akkor lefordul. Lehet, hogy a kolléga is valami olyanba futott bele ami a default architektúrán nem megy.

Új hozzászólás Aktív témák