1

Temat: Undefined reference

Kompiluję skrośnie jeden projekt c++ na Falcona. Sama kompilacja poszła praktycznie bez problemów, tylko kilka drobnych zmian, więc można powiedzieć, że projekt nienaruszony.
Ale podczas składania binarki dostaję serię "undefined reference to x" i tu różne warianty funkcji trygonometrycznych, jak sinf, cosf i więcej.
W projekcie nie ma użycia ani jednej z tych brakujących podczas linkowania funkcji, ale w plikach obiektowych jak najbardziej są już widoczne (???)
Strzelam, że zachodzi jakaś optymalizacja podczas kompilacji, ale nie umiem znaleźć w sieci nic w tym temacie (np że taka a taka opcja gcc to powoduje) więc pewnie nie o to chodzi.
A tak zwany "nasz" libm nie posiada żadnej z tych brakujących funkcji (a przynajmniej m68k-atari-mint-nm nic nie wykazuje) ma tylko klasyczne funkcje sin, cos, itp. Więc pytanko skąd się w plikach obiektowych wzięły te inne wersje funkcji i jak się tego pozbyć, tak aby kompilacja odbyła się z wykorzystaniem funkcji jakie są w źródłach?

Toolchain Thorsten'a oparty o gcc 9.3.1

Ostatnio edytowany przez jury (2022-06-03 11:29:37)

Odp: Undefined reference

Możliwe że -lm musisz dodać do opcji linkera. Z tego co pamiętam, na x86 -lm jest defaultowe (bo z dynamicznim linkowaniem koszt tego jest niemal zerowy, lub bliski zera, a u nas ze statycznym jest to problem.

Ewentualnie możesz w kodzie podmienić #include <math.h> na #include <math-68882.h>, to nie będzie wymagało zmian opcji linkera.

Jakich konkretnie symboli brakuje?

Ostatnio edytowany przez Adam Klobukowski (2022-06-03 18:23:38)

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

3

Odp: Undefined reference

Adam Klobukowski napisał/a:

Jakich konkretnie symboli brakuje?

No brakuje sinf, cosf, acosf, atanf i tak dalej. Wyczytałem wczoraj, że te funkcje "dotarły" do standardu nazwanego C99. Ale ich w "naszym" libm nie ma, są tylko podstawowe sin, cos i tak dalej.
Tyle, że w kodzie właśnie są tylko te podstawowe, to podczas kompilacji coś się dzieje, że są zamieniane na odpowiedniki "f" (których właśnie nie ma) Dlatego szukałem (bezowocnie) jakiejś opcji do dostarczenia kompilatorowi aby nie optymalizował sin na sinf, cos na cosf itp. Ale nic nie znalazłem.

Adam Klobukowski napisał/a:

Ewentualnie możesz w kodzie podmienić #include <math.h> na #include <math-68882.h>, to nie będzie wymagało zmian opcji linkera.

Tego nie znałem, ale właśnie spróbowałem w jednym pliku źródłowym podmienić na math-68881.h (bo math-68882.h nie istnieje, przynajmniej w tym Thorsten'owym toolchain'ie) i po uruchomieniu make, przestał krzyczeć, że w dla pliku obiektowego tej źródłówki ma undefined reference! :)
Na razie nie mam czasu na dalsze działania, ale później spróbuję to zrobić we wszystkich źródłach używających math.h bo wygląda na to, że to da efekt jaki potrzebuję! (czyli zostawi w spokoju oryginalne wywołania, bez zamieniania ich podczas kompilacji na odpowiedniki "f")

Ostatnio edytowany przez jury (2022-06-03 19:07:39)

Odp: Undefined reference

Tylko zastrzeżenie - użycie math-68881.h spowoduje że to pójdzie tylko na systemach z FPU.

Ostatnio edytowany przez Adam Klobukowski (2022-06-03 19:21:12)

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

5

Odp: Undefined reference

Potrzenujesz 030 i 68881 bo 060 nie ma instrukcji sin cos tan itp, więc może  stąd ten bład ;)

Ostatnio edytowany przez Cyprian (2022-06-03 20:14:05)

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org