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