Portál AbcLinuxu, 12. května 2025 21:37

Dotaz: Problém s připojením C knihovny do C++

30.3.2014 18:27 gld17 | skóre: 4 | blog: GLDiuv_blog
Problém s připojením C knihovny do C++
Přečteno: 319×
Odpovědět | Admin
Dobrý den,

potřebuji pracovat ve své aplikaci psané v C++ s externí knihovnou, ale mám problém s chybou "undefined reference to .." Celé to dělám na Raspberry Pi s Raspianem. Nemůžu už několik hodin zjistit řešení problému :D

Děkuji za pomoc :-)

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

30.3.2014 18:40 gld17 | skóre: 4 | blog: GLDiuv_blog
Rozbalit Rozbalit vše Re: Problém s připojením statické knihovny do C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
oprava: zlusil jsem použít i přepínač -static při kompilaci pwm.c, bez výsledku
Řešení 1× (gld17 (tazatel))
30.3.2014 19:46 gld17 | skóre: 4 | blog: GLDiuv_blog
Rozbalit Rozbalit vše Re: Problém s připojením statické knihovny do C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak problem vyresen, postup jsem mel spravne akorat je treba udelat pri includovani hlavicky toto:

extern "C" { #include "c_pwm/pwm.h" }

aby bylo receno, ze hlavicka je napsana v C. (?)

Nechapu proc jsem to musel tak dlouho hledat, vcelku podstatna vec :-/
30.3.2014 21:26 tertdgd
Rozbalit Rozbalit vše Re: Problém s připojením statické knihovny do C++
Odpovědět | | Sbalit | Link | Blokovat | Admin

Knihovnu je potreba pri sestavovani programu tzv. prilinkovat coz se dela pomoci -l. Ve tvem pripade to bude

g++ -o pwm main.c -lpwm
31.3.2014 14:14 Radek Isa | skóre: 14
Rozbalit Rozbalit vše Re: Problém s připojením statické knihovny do C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
Rek bych, ze tu knihovnu ani nemusíš vytvářet. Ty si sice vytvoříš knihovnu ale pak ji nepoužiješ. Pokud vyloženě chceš použít tu knihovnu musel by jsi ten soubor s příponou a prekopirovat do standartniho adresáře s knihovnamy /usr/lib nebo /usr/lib64 a hlavicku prekopirovat do standartního adresáře s hlavickama /usr/include. kazdá distribuce to muze mít trochu jinak.

Máš ješťe jednu možnost vytvořit si adresář se svýmy knihovnamy a adresar s hlavickovymy soubory treba ~/knihovny/include/ ~/knihovny/lib/ ale zde je nutné změnit patřičné proměné aby se při sestavování a spoušťení programu se nasli spravné knihovny.

v při programování by jsi potom do *.c souboru includoval <pwm> v a v prikazove radce musis pridat prepinac -llibpwm
31.3.2014 16:12 gld17 | skóre: 4 | blog: GLDiuv_blog
Rozbalit Rozbalit vše Re: Problém s připojením statické knihovny do C++
To nechapu, jak vytvorim knihovnu a pak ji nepouziju? Ja ji pouzivam zcela realne. Akorat jsem demonstroval volanim g++ z adresare Release rucne, ze neni problem v Qt.

Nicmene problem je uz vyresen.
Petr Bravenec avatar 31.3.2014 18:15 Petr Bravenec | skóre: 43 | blog: Bravenec
Rozbalit Rozbalit vše Re: Problém s připojením statické knihovny do C++
Houbelec. Vytvářet tu knihovnu je pravda tak trochu zbytečné - jestli jde o jeden soubor, dá se klidně připojit do projektu jeho zdrojový tvar, nebo použít .o soubor.

Pro připojení statické knihovny se nemusí knihovna nikam kopírovat, stačí přepínače

-I../include-path

pro překladač a přepínač

-L../library-path -lpwm

pro linker (nikoly milně uvedené -llibpwm ;-)

Dynamické knihovny se dají snadno najít pomocí LD_LIBRARY_PATH, případně nastavením cesty přímo v aplikaci Qt:

QCoreApplication::addLibraryPath("../library-path");

Statické knihovny se velmi často používají pro postupné sestavování rozsáhlejších projektů - sestaví se například gui.a, utils.a, database.a a vše linkuje z .a souborů a minima .o souborů, například:

g++ -o binarka main.o -L../utils utils.a -L?../gui gui.a -L../database database.a

Dynamické knihovny se dají použít i v rámci jedné aplikace, například pro implementaci plužin (česky plug-in).
Petr Bravenec - Hobrasoft s.r.o.

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.