2012-06-28 22 views
5

Próbuję skompilować stary projekt w języku C++ w Code :: Blocks przy użyciu kompilatora gcc, a po naprawieniu kilku innych problemów uderzyłem w ścianę: projekt ma plik z Intel-style inline ASM napisany jakoZespół inline w stylu Intela w gcc

_asm { 
    code here 
} 

i kompilator odmawia skompilować go z „błędem:«_asm»nie został zadeklarowany w tym zakresie”.

Spędziłem trochę czasu szukając rozwiązań, ale jedyne, co mogę znaleźć, to dodać -masm=intel do opcji kompilacji (których próbowałem i nie mogę dostać do pracy) lub przekonwertować kod do asm ("code here"); (co nie jest możliwe z powodu ogromnej ilości ASM). Czy ktoś wie, w jaki sposób mogę uzyskać gcc, aby skompilować ten kod, tak jak jest, czy powinienem zrezygnować i użyć innego kompilatora?

+0

Powtórzenie makra, a następnie użycie skryptu do zamiany linii _asm na makro. Wtedy uzyskasz lepszą niezależność od kompilatora. – daramarak

+0

Makro byłoby pomysłem, chociaż nigdy wcześniej go nie używałem, więc musiałbym to sobie wyobrazić (pomimo tego, co moje pytanie sprawiło, że brzmi, jestem właściwie kompletnym noobem z tym materiałem = /) . Ponadto, procedury asma są powiązane razem z etykietami lub czymś ('_asm {\ n tutaj kod \ n} L01: _ _asm ...') i nie jestem pewien jak sobie z tym poradzić. – Dinoguy1000

+0

Kod nie będzie się kompilował tak jak jest, musisz go zmienić, aby skompilował go z gcc (lub zamiast tego użyj MSVC). –

Odpowiedz

2

GCC używa very different syntax dla wbudowanego asemblera, więc nie będziesz w stanie obsłużyć go z drobnymi zmianami. Widzę następujące opcje:

  1. Przepisz wszystko w składni GCC lub jako kod C
  2. Make some skryptu tłumaczyć składni GCC (zadanie nietrywialne)
  3. kompilacji kodu z co kompilator został napisany dla (MSVC?)
+0

Opcja 2 jest szalenie optymistyczna. Zapomnij o tym! – TonyK

+0

Opcja 1 nie jest opcją; plik, o którym mowa, składa się wyłącznie z asmu i waży 83 KB, z kilkoma setkami funkcji. Wygląda na to, że po prostu muszę przełączyć kompilatory. – Dinoguy1000

+1

Ktoś faktycznie zrobił opcję 2, nazywa się to "intel2gas", użyłem jej w podobnych wysiłkach związanych z portowaniem. –

0

Po prostu nie można uzyskać gcc, aby skompilować kod "tak jak jest". Jeśli musisz skompilować to narzędzie za pomocą gcc, musisz przepisać kod w C++ lub kompatybilnym gcc. Jeśli naprawdę jest dużo kodu zespołu - powiedzmy 200 instrukcji lub więcej - warto zapoznać się z składnią asemblera gcc; jeśli nie, zakoduj go w C++.

+0

Zobacz mój komentarz na temat odpowiedzi Igora; przepisanie nie jest w tym przypadku opcją, ponieważ istnieją tysiące instrukcji (200 byłoby całkiem niezłym krokiem!). – Dinoguy1000

Powiązane problemy