1

Temat: Linkowanie - błąd "undefined reference"

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

Odp: Linkowanie - błąd "undefined reference"

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

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

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

Odp: Linkowanie - błąd "undefined reference"

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

Odp: Linkowanie - błąd "undefined reference"

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

Odp: Linkowanie - błąd "undefined reference"

Bez zmian.

6

Odp: Linkowanie - błąd "undefined reference"

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" 
jmp $e477

7

Odp: Linkowanie - błąd "undefined reference"

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.

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

8

Odp: Linkowanie - błąd "undefined reference"

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

Odp: Linkowanie - błąd "undefined reference"

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" 
jmp $e477

10

Odp: Linkowanie - błąd "undefined reference"

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ł smile
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.