kategoria:
[#1] parse error before '&'
...taki błąd dostaję, kiedy próbuję skompilować bibliotekę SDL stąd przy pomocy gcc v2.95.3 pod AmigaOS 3.9. Konkretnie podczas kompilacji SDL_cgxaccel.c na linijce 310:

if (dst->format->BitsPerPixel == 8)  //because CGX fillpixelarray dont work on 8 bit screens
		{ 
			if (this->screen->hwdata->lock)
			{
					UnLockBitMap(this->screen->hwdata->lock);
		            SetAPen(&temprp,color);
			        RectFill(&temprp,dstrect->x,dstrect->y,dstrect->w + dstrect->x ,dstrect->h + dstrect->y);
					this->screen->hwdata->lock=LockBitMapTags(temprp.BitMap,LBMI_BASEADDRESS,(ULONG)&this->screen->pixels,
					TAG_DONE);
		    return ;
			}
			SetAPen(&temprp,color);
			        RectFill(&temprp,dstrect->x,dstrect->y,dstrect->w + dstrect->x ,dstrect->h + dstrect->y);
		}
		else
tu ---->	FillPixelArray(&temprp,dstrect->x,dstrect->y,dstrect->w,dstrect->h,color);


Ktoś wie, co jest przyczyną? Halp.
[#2] Re: parse error before '&'

@snajper, post #1

Bardzo dziwne. Sprawdź czy pójdzie tak:

FillPixelArray(0, 0, 0, 0, 0, 0);


Potem sprawdź czy pójdzie tak:

FillPixelArray(0, dstrect->x, dstrect->y, dstrect->w, dstrect->h, color);


EDYT: A potem sprawdź tak:

struct RastPort rp;
FillPixelArray(&rp, dstrect->x, dstrect->y, dstrect->w, dstrect->h, color);


Ale to dalej nie jest fix tylko próba namierzenia przyczyny ;)

Ostatnia aktualizacja: 22.02.2018 15:44:01 przez teh_KaiN
[#3] Re: parse error before '&'

@snajper, post #1

Orłem c nie jestem, ale tak na gorąco co bym zrobił:
- znalazł i wywalił linijkę stwarzającą problem, czasem można się zdziwić gdy kompilator wskazuje numer linii inny niż rzeczywisty błąd
- mając linijkę, parametr po parametrze można szukać błędnego kawałka.
- może coś nie halo jest z definicją FillPixelArray
- poczytałbym to: https://www.gidforums.com/t-7263.html
[#4] Re: parse error before '&'

@teh_KaiN, post #2

żadna z opcji nie przechodzi, ten sam error. W sensie - jak wkleję 0, 0, 0, 0 to jest parse error before 0.

@infboras:
- znalazł i wywalił linijkę stwarzającą problem, czasem można się zdziwić gdy kompilator wskazuje numer linii inny niż rzeczywisty błąd


to już zrobiłem - błąd jest dokładnie w tej ostatniej linijce, którą podałem. Po jej skomentowaniu wszystko kompiluje się do końca. Zapoznam się z tą stronką, którą podałeś.


Ostatnia aktualizacja: 22.02.2018 16:22:49 przez snajper

Ostatnia aktualizacja: 22.02.2018 16:25:32 przez snajper
[#5] Re: parse error before '&'

@snajper, post #4

Teraz zobaczyłem na górze tego pliku że GCC coś się nie podobają funkcje z duża liczbą argumentów i stosują jakieś dziwne obejścia. Może to to? Na linii 52/53 czy w okolicy dodaj:

#define 	FPA(a,b,c,d,e,f) FillPixelArray(a,b,c,d,e,f)


Zamiast problematycznej linii:

FPA(&temprp,dstrect->x,dstrect->y,dstrect->w,dstrect->h,color);


Ostatnia aktualizacja: 22.02.2018 16:40:57 przez teh_KaiN
[#6] Re: parse error before '&'

@teh_KaiN, post #5

dalej to samo. :(
[#7] Re: parse error before '&'

@snajper, post #6

porzuc to nieszczesne C++ i naucz sie programowac w Javie
[#8] Re: parse error before '&'

@snajper, post #1

Przepraszam pomylilo mi sie cos.

Bo oprocz tego ze funkcja ma zwracat typ int, a przedostatni return jest pusty to chyba innego bledu nie ma.

Ostatnia aktualizacja: 22.02.2018 19:04:49 przez Phibrizzo
[#9] Re: parse error before '&'

@snajper, post #6

Dzisiaj wieczorem spróbuję to zbudować u siebie, więc się uzbrój w cierpliwość ;)
[#10] Re: parse error before '&'

@teh_KaiN, post #9

Zbudowało mi się ale przy użyciu tego kompilatora - dzisiaj w robocie mi się budował, dlatego dopiero teraz sprawdziłem. ;)

Były przy tym drobne problemy, ale się udało. Sam kompilator Bebbo jest problematyczny na windowsie i o wiele łatwiej go odpalić na linuchu. Jeśli gardzisz linuchem jak ja to pozostaje Ci skalać swój system instalacją cygwina. Będzie z tym trochę bolcowania się, ale nowe gcc jest w sumie fajne i warto się przesiąść.

Jak będziesz miał problemy z jego instalacją czy cuś to pisz - mogę Ci nawet tutka zrobić krok po kroku.
[#11] Re: parse error before '&'

@teh_KaiN, post #10

spoko, dzięki - ja dzisiaj sobie akurat zainstalowałem Ubuntu na pendraku i też próbowałem zbudować cross-compiler dla AmigaOS - jest akurat dla Ubuntu gotowy skrypt do tego na aminecie, ale coś koślawo mi to wyszło. :/ Podczas próby skompilowania SDL sypie masą błędów. Jutro wyczyszczę ten syf, co narobiłem dzisiaj, i spróbuję na czysto z tym kompilatorem, który podałeś. BTW pod MSYS2 na windzie to pójdzie? Bo akurat mam go zainstalowanego (służył mi do kompilacji SuperTuxa pod windę).
[#12] Re: parse error before '&'

@snajper, post #11

Nie próbowałem na msysie, zasugerowałem się tym że Bebbo zalecał cygwina. Możesz sprawdzić i dać znać czy pykło - bo bym bardzo chętnie cygwina z dysku wywalił ;)
[#13] Re: parse error before '&'

@teh_KaiN, post #12

sprawdziłem póki co pod Ubuntu i wykłada się przy budowaniu SDL na tym samym, co poprzednio. Tzn może nie tyle się wykłada, co ja nie mam wystarczającej wiedzy, żeby skorygować błąd. Mianowicie podmieniam najpierw plik Makefile przez Makefile.cross, edytuję tam w środku co trzeba i zaraz na starcie przy make zwraca error, że "No rule to make target cośtam.lo". No to mu zacząłem ręcznie (bo inaczej nie umiem ;P) libtoolem te .lo tworzyć, aż przy bodajże SDL_audio.c napisał, że nie może znaleźć exec/exec.h. To walnąłem export C_INCLUDE_PATH="/opt/m68k-amigaos/m68k-amigaos/sys-include" i po tym już poleciało kilka(naście) ekranów errorów, przy których już wymiękłem. Nie wiem, może coś robię źle...
Za próbę z cygwinem/msysem wezmę się po południu, jeśli z Ubuntu nic do przodu się nie uda pchnąć - ale wątpię, że to coś zmieni. :/
[#14] Re: parse error before '&'

@snajper, post #13

Ja budowałem komendą:

make -f Makefile.bax


Uprzednio w tym pliku podmieniając PREFIX i PREF na swoją ścieżkę. Nie wiem jaka jest różnica między .bax a .cross ale wydaje mi się, że .cross jest stary, a .bax jest rozwijany. Ach te porządki. ;)

W sumie wczoraj zgłosiłem błąd do Bebbo wspominając, że issues są wyłączone na repo SDLa, to przy okazji właściciel się odezwał i je włączył. Możesz im tam trochę potruć - zarówno zgłosić błąd z gcc 2.9 jak i bolączki z tym nowym.

btw. witamy w piekle kompilacji czegokolwiek na 68k. Zacznij czerpać z tego przyjemność bo inaczej wyrwiesz sobie wszystkie włosy z nerwów. ;)

Ostatnia aktualizacja: 24.02.2018 12:06:52 przez teh_KaiN
[#15] Re: parse error before '&'

@teh_KaiN, post #14

Ja budowałem komendą:

make -f Makefile.bax


o widzisz, na to bym nie wpadł. Poszło bez marudzenia. :) Co prawda przy próbie otwarcia libSDL.a pod Ubuntu pisze, że "archive type not supported", ale możliwe, że to ja coś spieprzyłem kombinowaniem z tym libtoolem na starcie. Dla pewności spróbuję więc od początku.

btw. witamy w piekle kompilacji czegokolwiek na 68k. Zacznij czerpać z tego przyjemność bo inaczej wyrwiesz sobie wszystkie włosy z nerwów. ;)


spoko, zdążyłem już zauważyć, że to dobry zabijacz czasu. :P
[#16] Re: parse error before '&'

@snajper, post #15

Yyy... Jak otworzyć? Nic nie otwierasz, tylko przy linkowaniu na końcu dodajesz -lSDL (myślnik małe el) i -Lścieżka/do/katalogu/zawierającego/libSDL.a (myślnik wielkie el)

.a zawiera wszystkie pliki .c SDLa skompilowane i zlepione do jednego pliku. Także kompilujesz pliki .c ze swojego SuperTurra, doklejasz (linkujesz) do tego libSDL.a i tyle, wychodzi Ci plik wykonywalny.

Ostatnia aktualizacja: 24.02.2018 13:21:31 przez teh_KaiN
[#17] Re: parse error before '&'

@teh_KaiN, post #16

Yyy... Jak otworzyć?


No .a to chyba archiwum. Poczytałem sobie już o tym parę dni temu. :) Zawartość można podejrzeć poleceniem ar -t, więc myślałem, że dwuklikiem w Ubuntu sobie analogicznie je otworzę.
enyłej, coś ten pliczek libSDL.a jest nietego, bo po podmianie libSDL.a w WinUAE, jak robię ./configure SuperTurrowi, to twierdzi, że nie może znaleźć biblioteki SDL_mixer. Jak zamienię libSDL.a spowrotem, to jest ok.

Ostatnia aktualizacja: 24.02.2018 15:54:43 przez snajper
[#18] Re: parse error before '&'

@snajper, post #17

Obawiam się, że .a zrobiony w nowszym GCC nie będzie kompatybilny ze starym GCC. Na Twoim miejscu bym SuperTurra kompilował tym samym kompilatorem co SDLa.
[#19] Re: parse error before '&'

@teh_KaiN, post #14

btw. witamy w piekle kompilacji czegokolwiek na 68k. Zacznij czerpać z tego przyjemność bo inaczej wyrwiesz sobie wszystkie włosy z nerwów. ;)

Ja nie komplikuję sobie życia i na Amidze korzystam z NDK (Native Developer Kit) 3.1, który bardzo pomaga przy rozwoju programów na Amigę.

Zaś jeśli chodzi o SDL, to przyznam, że jest całkiem fajny. Ostatnio miałem okazję się z nim zapoznać przy projekcie zespołowym, który piszę na studia.
[#20] Re: parse error before '&'

@teh_KaiN, post #18

z kompilacją SuperTurra pod Ubuntu jest ten problem, że ./configure wymaga biblioteki SDL_Mixer, której w wersji dla Amigi nie trawi (wcześniej szuka jeszcze samego SDL, ale tu jest łaskawy i z okazji cross-kompilacji zakłada, że biblioteka jest ok i jej nie testuje).
W tym momencie zmagam się więc z linuxową cross-kompilacją amigowego SDL_Mixera 1.2.5, która już prawie bez błędów doszła do końca, ale niestety na do widzenia dowala coś takiego. Chociaż libSDL_mixer.a jest wcześniej tworzony i już istnieje w katalogu .libs
[#21] Re: parse error before '&'

@snajper, post #20

O Panie, to dopiero! Niefortunna nazwa parametru, jak zmienisz __interrupt na cokolwiek innego, np. int interruptCode, to ruszy - zarówno w pliku .h jak i w .c to musisz zrobić. Czytaj dalej jak chcesz wiedzieć o co chodzi

Generalnie w GCC amigowym możesz podpinać funkcje C pod sprzętowe i systemowe przerwania, definiuje się taką funkcję tak:

__attribute__((__interrupt__)) void myInterruptHandler() { ... }


Lub jeśli chcesz mniej pisać:

__interrupt void myInterruptHandler() { ... }


gdzie jak widzisz __interrupt jest skrótowcem. Jak teraz w kodzie GCC zobaczył to słówko w liście argumentów to zgłupiał. ;)
[#22] Re: parse error before '&'

@teh_KaiN, post #21

dobra, dałem sobie z tym spokój. Dzięki za wyjaśnienia w każdym razie.
Doszedłem do miejsca, w którym na koniec kompilator sypał dłuuuuuuugą serią "undefined reference to" - przy czym o ile pod WinUAE tyczyło się to tylko funkcji SDL_*, to pod Ubuntu także takich jak free, malloc czy __mulsi3, która powinna się chyba znajdować w bibliotece libgcc. I mimo ręcznego dołączania brakujących bibliotek błędy leciały bez zmian. Pod WinUAE po zastąpieniu libSDL.a na starszą wersję kompilacja SDL_mixera doszła do końca (nie licząc problemów z tworzeniem hard linków; no i musiałem oszukać ./configure, które twierdziło, że nie ma zainstalowanego SDL - mimo że był - i że dalej nie pójdzie) i gra się z nowym mixerem + starym SDL kompiluje i uruchamia, natomiast przy próbie kompilacji z nowym SDL - podobnie jak SDL_mixer sypie na koniec błędami. Czyli albo jednak coś musi być spieprzone z tym SDL (co jest dość prawdopodobne, biorąc pod uwagę, że to była cross-kompilacja), albo taki duet się nie lubi. Chyba przyjrzę się jeszcze raz pliczkom Makefile od SDL-a i spróbuję zbudować go na nowo.

Ostatnia aktualizacja: 28.02.2018 09:26:23 przez snajper
[#23] Re: parse error before '&'

@snajper, post #22

Możliwe że -noixemul by zrobiło robotę gdy nie widzi funkcji z biblioteki standardowej.
[#24] Re: parse error before '&'

@teh_KaiN, post #23

No i trafiłeś w dziesiątkę. :) Aczkolwiek sam wcześniej zwróciłem na to uwagę, że w ostatnich linijkach na githubie projektu jest pewna istotna informacja... I sprawdziło się powiedzenie: jak coś nie działa, przeczytaj instrukcję. Zbudowałem od nowa SDL, tym razem pod WinUAE, potem również pod WinUAE SDL_mixer, a później SuperTurra. I nie dość, że to działa, to jeszcze całkiem szybko - w granicach 7-15fps - i muza już nie tnie, da się w to grać. :) No, przynajmniej pod emulatorem.
[#25] Re: parse error before '&'

@snajper, post #24

Supcio! Niestety prawdopodobnie więcej FPSów będziesz miał tylko i wyłącznie jeśli byś porzucił całego SDLa, a to może być rzeźba...
[#26] Re: parse error before '&'

@teh_KaiN, post #25

spoko, i tak jest dużo lepiej niż było. Jedyny mankament, że gierka nie skompiluje się z -noixemul, a ixemul z tego co wiem wymaga FPU. Chociaż w tej chwili znalazłem tutaj informację o wersji, która podobnież go nie potrzebuje... Zaraz to sprawdzę.
[#27] Re: parse error before '&'

@snajper, post #26

Z -noixemul dalej są brakujące referencje? Jak tak to jakie? Sam mam z tym problem teraz próbując dopasować GCC do swojej gry i pracuję nad dodaniem ich, więc jeśli nie ma dużo braków to mogę je przy okazji też zrobić. Wklej tu listę, co Ci krzyczy.
[#28] Re: parse error before '&'

@teh_KaiN, post #27

nie pamiętam dokładnie, jaka jest treść błędu, później sprawdzę, to wkleję. Przy fladze -noixemul błąd pojawia się bodajże dopiero podczas linkowania, brakuje funkcji fdopen().
[#29] Re: parse error before '&'

@snajper, post #28

Tak, błędy w linkowaniu to typowy objaw braku implementacji danej funkcji. ;) I faktycznie, fdopen jest nieobecna w libnix (bo to jest linkowane jak użyjesz -noixemul), a napisanie tej funkcji to nie jest jakaś wielka filozofia, więc zajmę się tym jak skończę naprawiać vsnprintf.

Daj znać co tam jeszcze wyskoczyło.
[#30] Re: parse error before '&'

@teh_KaiN, post #29

tak to wygląda:

Making all in src
make[1]: Entering directory `/Programs/ADE/home/superturr-0.1.3/src'
g++  -g  -noixemul -O3 -fomit-frame-pointer -m68020-60 -I/usr/include/SDL  -DDATA_PREFIX='"/usr/local/share/supertux"'   -o supertux  badguy.o bitmask.o button.o collision.o configfile.o intro.o gameloop.o globals.o high_scores.o level.o leveleditor.o lispreader.o menu.o particlesystem.o physic.o player.o scene.o screen.o setup.o sound.o special.o supertux.o text.o texture.o timer.o title.o type.o world.o worldmap.o tile.o mousecursor.o resources.o gameobjs.o sprite.o sprite_manager.o music_manager.o musicref.o  -noixemul -lz -lSDL_image -lSDL_mixer  -L/usr/lib -lSDL -ldebug -lpng -ljpeg -lz -lGL -lpthread -lm
/usr/lib/libz.a(gzio.o)(.text+0x1d0): undefined reference to `fdopen'
collect2: ld returned 1 exit status
make[1]: *** [supertux] Error 1
make[1]: Leaving directory `/Programs/ADE/home/superturr-0.1.3/src'
make: *** [all-recursive] Error 1
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem