Portál AbcLinuxu, 10. května 2025 05:32

Dotaz: Problémy s C - linkovani knihovny math

15.5.2005 22:21 ssil | skóre: 15
Problémy s C - linkovani knihovny math
Přečteno: 146×
Odpovědět | Admin
Začal jsem se potýkat s Cčkem a narazil jsem na následující problém. V programu je funkce sqrt, ale při překladu se dovídám, že není deklarována. Přitom v úvodu mám

#include < math.h>

Když jsem si četl math.h, tak jsem se dozvěděl o odkazu na bits/mathcalls.h v němž to sqrt je. Pokusil jsem se includovat i to bits/mathcalls.h, ale skončilo to spoustou erorrů, takže tudy cesta nevede.Poradíte tu správnou?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.5.2005 00:45 Michal Kubeček
Rozbalit Rozbalit vše Re: Problémy s C
Odpovědět | | Sbalit | Link | Blokovat | Admin
A je to opravdu chyba při překladu? Není to až při linkování (chybějící -i>lm)?
16.5.2005 00:46 Michal Kubeček
Rozbalit Rozbalit vše Re: Problémy s C
Tak druhý pokus, v závÄorce mělo být -lm
16.5.2005 06:57 Leoš Literák | skóre: 74 | blog: LL | Praha
Rozbalit Rozbalit vše Re: Problémy s C
závÄorce
to je preklep nebo to pismeno vygeneroval system?
Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
16.5.2005 09:20 Michal Kubeček
Rozbalit Rozbalit vše Re: Problémy s C
Překlep to není určitě, spíš problém s UTF-8 na straně mého lynxu. Obvykle ho používám jen k prohlížení, ne k vyplňování formulářů, takže jsem si toho zatím nevšiml.
16.5.2005 07:50 burlog | skóre: 9
Rozbalit Rozbalit vše Re: Problémy s C
Odpovědět | | Sbalit | Link | Blokovat | Admin
No ja si nejsem jisty, ale za znakem '<' mate mezeru a pokud je cut&paste, pak to je jasna chyba....
16.5.2005 08:32 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Problémy s C
Odpovědět | | Sbalit | Link | Blokovat | Admin
1. bits/mathcalls.h se nikdy přímo neincluduje (můj tedy dokonce vyvolá #error, když se o to pokusíš), pouze math.h (+ před tím případně definuješ _GNU_SOURCE, chceš-li rozšíření GNU, ale sqrt() je standardní funkce).

2. Při linkování ti chybí -lm, jak už napsal Michal.
16.5.2005 08:41 ssil | skóre: 15
Rozbalit Rozbalit vše Re: Problémy s C
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak tu mezeru tam samozřejmě nemám, ale tady mi to bez ní nechtělo napsat menšítko. Jinak ten text podle nějž se to učím je původně evidentně pro win a tak jsem musel ve svém Sarge změnit \ na / a includovat sys/io.h místo io.h, ale s tím sqrt jsem nehnul. Když dám

gcc soubor.c -o soubor

tak mi to hlásí chybu v main, není deklarováno sqrt a že musí být deklarováno před prvním použitím. Z toho jsem usoudil, že to tuto funkci nezná a začal jsem ji hledat. No a výsledek jsem popsal na začátku.
16.5.2005 08:50 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
Rozbalit Rozbalit vše Re: Problémy s C
Tak zkus přlinkovat tu knihovnu co tu všichni říkají a případně sem opiš chybu co to hází.
Copak toho není dost?
16.5.2005 08:51 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Problémy s C
sys/io.h není moc dobrý ekvivalent, nechceš includovat spíš unistd.h?

Nelinkuješ matematickou knihovnu, to je furt dokola. Jelikož spouštíš kompilaci a linkování dohoromady, přidej -lm přímo k tomu gcc.

Viz gcc(1), -l library.
16.5.2005 09:01 ssil | skóre: 15
Rozbalit Rozbalit vše Re: Problémy s C
Vyzkoušel jsem i to unistd.h a nejsem schopen říct nic víc, než že to taky funguje. Jak poznám, že je to lepší ekvivalent, než sys/io.h?
16.5.2005 09:40 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Problémy s C
sys/io.h obsahuje deklarace funkcí pro vstup z portů, resp. výstup na porty a pod.

Pokud ti to funguje s unistd.h a sys/io.h, nejspíš nepoužíváš funkce ani z jednoho. Nebo spíš nemáš zapnuté warningy při nedeklarovaných funkcích a budeš se asi hodně divit, až ten program spustíš.
16.5.2005 08:51 ssil | skóre: 15
Rozbalit Rozbalit vše Re: Problémy s C
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dík. už je to v pořádku, chtělo to -lm.
16.5.2005 09:34 ssil | skóre: 15
Rozbalit Rozbalit vše Re: Problémy s C - linkovani knihovny math
Odpovědět | | Sbalit | Link | Blokovat | Admin
Teď jsem narazil ještě na jeden problém. Nemám knihovnu process.h. Jaký bych mohl použít ekvivalent?
16.5.2005 09:36 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Problémy s C - linkovani knihovny math
Taky unistd.h (a nejspíš +sys/types.h).
16.5.2005 09:57 podlesh | skóre: 38 | Freiburg im Breisgau
Rozbalit Rozbalit vše Re: Problémy s C - linkovani knihovny math
Odpovědět | | Sbalit | Link | Blokovat | Admin
Doporucuji si poradne ujasnit, co to je HLAVICKOVY SOUBOR (a jak funguje vubec cely preprocesor), co to je KNIHOVNA. Kdo si toto neujasni, ten bude s C vzdy tezce bojovat a casto prohravat.
16.5.2005 15:47 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: Problémy s C - linkovani knihovny math
Odpovědět | | Sbalit | Link | Blokovat | Admin
Hmm ze by si se ucil podle knizky "Nauc se sam C" taky jsem na ten problem narazil.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.