1

Mam między innymi taki kawałek kodu:

    x += dest->clip.x;
    y += dest->clip.y;

    if (use_off) {
        x += le16toh(sprite->x);
        y += le16toh(sprite->y);
    }

Kompiluje się to bez problemu (no, może daje tylko mały warrning: implicit declaration of function 'le16toh') natomiast podczas linkowania dostaję:
"undefined reference to `_le16toh'"

Poczytałem w sieci na temat tego błędu i znalazłem fajne wytłumaczenie problemu i rozwiązanie:
https://stackoverflow.com/questions/532 … n-makefile
Ale żadno z zaproponowanych 3 rozwiązań nie pomogło.

Komenda którą komiluję źródło:

m68k-atari-mint-gcc -m68020-60 -std=gnu99 -DHAVE_CONFIG_H -I.    -I/home/jury/sdl_stuff/include/SDL -I/home/jury/sdl_stuff/include -D_DEFAULT_SOURCE=1 -D_REENTRANT  -I/home/jury/sdl_stuff/include/SDL -I/home/jury/sdl_stuff/include -g -O2 -c -o src/sdl-video.o src/sdl-video.c 

Jak to ugryźć żeby się zlinkowało prawidłowo?
Bo już kurde jestem bliski  zainstalowania środowiska gcc natywnie na Falconie i tam powywalałbym te wszystkie makra (nie jest ich dużo, ale parę jest) związane z konwersją indianów to powinno mi się natywnie (raczej) prawidłowo zlinkować. Ale to zostawiam jako ostateczność, tym bardziej, że kompilacja większych rzeczy nawet na 100MHz to małe wyzwanie.

2 Ostatnio edytowany przez perinoid (2020-11-04 18:52:42)

Ten warning sugeruje, że czegoś nie dodałeś tudzież nie masz w systemie. Masz #include <endian.h> na początku?
Ewentualnie spróbuj w linii komend -D_DEFAULT_SOURCE zamiast -D_DEFAULT_SOURCE=1

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

3

perinoid napisał/a:

Masz #include <endian.h> na początku?

Jest tam jakiś własny endian, któru w sobie oczywiście robi załączenie tego systemowego.

perinoid napisał/a:

Ewentualnie spróbuj w linii komend -D_DEFAULT_SOURCE zamiast -D_DEFAULT_SOURCE=1

Nie pomogło.

4

Spróbuj jeszcze -D_BSD_SOURCE zamiast -D_DEFAULT_SOURCE

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

5

Bez zmian.

6

Traktuj każdy warning jako błąd. kropka

Dodaj:
#include <endian.h>

Skoro masz warning to "Jest tam jakiś własny endian, któru w sobie oczywiście robi załączenie tego systemowego." nie działa lub czegoś Ci brakuje. Masz mintliba zainstalowanego na pewno?

Jak się pozbędziesz warninga daj znać co się zmieniło.

"tatusiu zobacz, narysowałam tobie takie same coś jak na twojej koszulce" 
https://github.com/willyvmm/mouSTer
jmp $e477

7 Ostatnio edytowany przez jury (2020-11-05 16:21:27)

Dodawać tego <endian.h> z ciekawości oczywiście dodawałem, ale nic to nie zmieniało.
A co do mintliba, to zdecydowanie powinienem mieć, regularnie coś tam kross-kompiluję i wszystko działa jak należy, ale może coś mi się tam ostatnio faktycznie rozjechało, zerknę dzisiaj i zweryfikuję czy wszystko jest OK.

8

Ja w takich sytuacjach:
1. includuję plik, w którym funkcja jest zadeklarowana,
2. grepuje wszystkie biblioteki danego kompilatora, by znaleźć plik, który powinienem dołączyć do linkowania.

9

Sprawdz co masz w tym endian.h bo jak sie includuje bez bledu to cos moze byc nie tak ze sciezkami i includuje ci nie to co trzeba.

"tatusiu zobacz, narysowałam tobie takie same coś jak na twojej koszulce" 
https://github.com/willyvmm/mouSTer
jmp $e477

10

OK, dzięki za wszelakie sugestie. Dzisiaj miałem chwilkę to przysiadłem znowu do tematu i najpierw zacząłem z ciekawości przeglądać (uważniej) ten własny endian projektu i znalazłem przyczynę problemu. Potrzebne makra były zaplątane w serię #ifdef'ów i #ifndef'ów które źle zinterpretowałem, więc w rzeczywistości te makra nie były definiowane. Dostosowałem odpowiednio #ifdef'y i projekt się zbudował :)
Z ciekawości sprawdziłem też endian.h cross-toolchain'a (mam zainstalowany Vincent'owy) i trochę się zdziwiłem, bo tam w endian.h nie ma tych makr.
Pobrałem sobie też toolchain Thorsten'a (w wersji 8.coś tam, choć widziałem że już ma 9.cośtam i nawet 10.cośtam) i jak sprawdziłem jego endian.h, to wygląda jak najbardziej "prawidłowo", ma te wszystkie indiańskie marka i takie tam... Nic to, najważniejsze, że projekt się już buduje, a skoro jeszcze pewnie w tym roku będę  zmieniał distro, to zapewne już pójdę w toolchain Thorsten'a, a na razie nic nie ruszam.