Re: Cčko a přilinkování knihovny

Jindroush jindroush na seznam.cz
Středa Listopad 10 16:09:08 CET 2021


Ta hlaska rika, ze funkce z te json knihovny potrebuje funkce isnan a 
isinf, coz jsou funkce z math knihovny, ktere se musi prilinkovat pomoci -lm
https://man7.org/linux/man-pages/man3/fpclassify.3.html
Ta funkce je v json-object.c, ten includuje math.h a vola ty funkce.
Je dost mozne, ze se to lisi podle architektury a pouziteho kompilatoru 
- nektere maji tyto 'jednoduche' funkce primo generovane kompilatorem 
jako __builtin_*, takze pak se pro ne nesaha do knihovny.

Co se tyce jmen souboru, knihovni soubory jsou libXX.a, cmdline option 
je -lXX (na linux-osech)

-I neni rekurzivni
https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options

On 10.11.2021 15:51, cizek.milan at seznam.cz wrote:
> 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
>
>
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list at list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


-- 
Jindroush <jindroush at seznam.cz>



Další informace o konferenci Hw-list