Cčko a přilinkování knihovny

cizek.milan na seznam.cz cizek.milan na seznam.cz
Středa Listopad 10 15:51:52 CET 2021


Ahoj,

už dva dny se neúspěšně snažím přilinkovat si k C projektu json-c (starší
verze). Od něj mám .a statickou knihovnu i hlavičkové soubory.
Knihovna je vykompilovaná (cross kompilace) v jiném kroku sestavení, tj.
mimo můj makefile.

Nejsem žádný profík na vytvoření Makefile, ale podle mého to musí být nějaký
zádrhel tam.
Ať se snažím sebevíc, pořád mi to na něčem řve. Nejdále jsem se dostal do
stavu...

msdk-linux-gcc -I.
-I/home/milanc/rtl819x-SDK-v3.4.14b-full-package/rtl819x/users/boa/apmib/
-I/home/milanc/rtl819x-SDK-v3.4.14b-full-package/rtl819x/users/curl-7.79.1/i
nclude/
-I/home/milanc/rtl819x-SDK-v3.4.14b-full-package/rtl819x/users/lib/include/j
son-c/
-I/home/milanc/rtl819x-SDK-v3.4.14b-full-package/rtl819x/linux-3.10/drivers/
net/wireless/rtl8192cd/ -fPIC -Wall -Werror -L.
-L/home/milanc/rtl819x-SDK-v3.4.14b-full-package/rtl819x/users/boa/apmib/
-L/home/milanc/rtl819x-SDK-v3.4.14b-full-package/rtl819x/users/boa/src/
-L/home/milanc/rtl819x-SDK-v3.4.14b-full-package/rtl819x/users/lib/lib/
-lapmib sthelper.c
/home/milanc/rtl819x-SDK-v3.4.14b-full-package/rtl819x/users/boa/src/version
.o
/home/milanc/rtl819x-SDK-v3.4.14b-full-package/rtl819x/users/lib/lib/libjson
-c.a -o sthelper
/home/milanc/rtl819x-SDK-v3.4.14b-full-package/rtl819x/users/lib/lib/libjson
-c.a(json_object.o): In function `json_object_double_to_json_string':
json_object.c:(.text+0x1be4): undefined reference to `__isnan'
json_object.c:(.text+0x1c38): undefined reference to `__isinf'

V projektu mám #include <json.h>, jedná se o první demo příklad zde:
https://gist.github.com/alan-mushi/19546a0e2c6bd4e059fd

Už jsem zkoušel vše možné, ale mám tam dost nejasností... takto vypadá můj
Makefile https://pastebin.com/y2h4nHxh

Byl jsem přesvědčen, že třeba -I projde i podadresáře s hlavičkovými soubory
(prostě rekurzivně), ale takto mi to nefunguje a musel jsem dát i s
podadresářem.
Pak jestli chápu, -l se používá jen u dynamických (.so) knihoven? Takže
pokud linkuji statickou .a, tak ne? A jsem zmatený z toho názvu, protože
knihovna se většinou (ale ne vždy) jmenuje s prefixem lib*.a, ale za tento
parametr se to uvádí bez toho lib? 

Ideálně bych měl všechny knihovny linkované dynamicky a v .so podobě,
protože je využívají i jiné části projektu. Ale to je až další krok, až se
mi podaří toto.

Trochu jsem se dostal dál, pokud přidám -lm, což by měla být nějaká knihovna
libm. Znamená to, že ji json potřebuje? V požadavcích to neuvádí.
https://github.com/json-c/json-c#linking

Dokázal by mi s tím nějaký Cčkař pomoci? Klidně za úplatu.
Rád věcem rozumím, ale na těchto věcech se dost zasekávám. :-(
Děkuji.

Milan






Další informace o konferenci Hw-list