Portál AbcLinuxu, 14. května 2025 01:34

Dotaz: C++ && CMake && CommonCpp

31.5.2008 15:28 Radim Antihulán
C++ && CMake && CommonCpp
Přečteno: 465×
Odpovědět | Admin
Zdravím, rád bych se zeptal jestli někdo nevíte co mám dělat s tím, když mi gcc nahlásí něco jako: device_db.cpp:(.text+0x99f): undefined reference to `ost::XMLStream::~XMLStream()' ?

Používám KDevelop a je to C++ CMake projekt. Ten destruktor, kterej to nemůže najít je součástí XML parseru z frameworku commonc++. Kdyby to náhodou někoho zajímalo, snažím se vyřešit programátor MCU AT89Sx na Linux, jako součást projektu MCU 8051 IDE.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

kozzi avatar 31.5.2008 16:02 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: C++ && CMake && CommonCpp
Odpovědět | | Sbalit | Link | Blokovat | Admin
No toto znamená že se při slinkování nenašla žádná knihovna nebo soubor, jež by obahoval(a) definici dané ho destruktoru.
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
31.5.2008 16:39 Radim Antihulán
Rozbalit Rozbalit vše Re: C++ && CMake && CommonCpp
Jasně, to je zřejmý, ale co bych musel zapsat to CMakeLists.txt aby linker našel ten příslušnej *.so* modul ? Vidím to tak, že asi budu muset přejít na Autotools, ale rád bych použil CMake.
kozzi avatar 31.5.2008 16:45 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: C++ && CMake && CommonCpp
No a co tam mas ted?
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
31.5.2008 16:54 Radim Antihulán
Rozbalit Rozbalit vše Re: C++ && CMake && CommonCpp
PROJECT(eval_brd_a)

#if you don't want the full compiler output, remove the following line SET(CMAKE_VERBOSE_MAKEFILE ON)

#add definitions, compiler switches, etc. ADD_DEFINITIONS(-Wall -O2)

#list all source files here ADD_EXECUTABLE(eval_brd_a main.cpp ispi.cpp programmer.cpp hextools.cpp device_db.cpp)

#need to link to some other libraries ? just add them here # TARGET_LINK_LIBRARIES(eval_brd_a)
31.5.2008 16:58 Radim Antihulán
Rozbalit Rozbalit vše Re: C++ && CMake && CommonCpp
PROJECT(eval_brd_a)
#if you don't want the full compiler output, remove the following line
SET(CMAKE_VERBOSE_MAKEFILE ON)
#add definitions, compiler switches, etc.
ADD_DEFINITIONS(-Wall -O2)
#list all source files here
ADD_EXECUTABLE(eval_brd_a main.cpp ispi.cpp programmer.cpp hextools.cpp device_db.cpp)
#need to link to some other libraries ? just add them here
# TARGET_LINK_LIBRARIES(eval_brd_a)
kozzi avatar 31.5.2008 16:54 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: C++ && CMake && CommonCpp
No ale mam divny pocit ze o tom to neni, jelikoz je dost divny ze by mu chbel destruktor ale konstruktor nee, takze problem spis bude ze je ta knihovna nejka spatna. mozna zkusit pouzit jinaci kompilator. Co mas za verzi?
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
31.5.2008 17:01 Radim Antihulán
Rozbalit Rozbalit vše Re: C++ && CMake && CommonCpp
Momemnt, omlouvám se, ale asi jsem se špatně vyjádřil. Ten jeden řádek jenom ukázka chybovýho výpisu, tady je to celý:
device_db.cpp:(.text+0x99f): undefined reference to `ost::XMLStream::~XMLStream()' device_db.cpp:(.text+0xa2f): undefined reference to `ost::XMLStream::~XMLStream()' device_db.cpp:(.text+0xb1d): undefined reference to `ost::XMLStream::parse(char const*)' device_db.cpp:(.text+0xba7): undefined reference to `ost::XMLStream::~XMLStream()' device_db.cpp:(.text+0xaa7): undefined reference to `ost::XMLStream::~XMLStream()' device_db.cpp:(.text+0xc37): undefined reference to `ost::XMLStream::~XMLStream()' CMakeFiles/eval_brd_a.dir/device_db.o:(.rodata._ZTV9Device_db[vtable for Device_db]+0x20): undefined reference to `ost::XMLStream::open(char const*)' CMakeFiles/eval_brd_a.dir/device_db.o:(.rodata._ZTV9Device_db[vtable for Device_db]+0x28): undefined reference to `ost::XMLStream::close()' CMakeFiles/eval_brd_a.dir/device_db.o:(.rodata._ZTV9Device_db[vtable for Device_db]+0x30): undefined reference to `ost::XMLStream::getLogging()' CMakeFiles/eval_brd_a.dir/device_db.o:(.rodata._ZTV9Device_db[vtable for Device_db]+0x38): undefined reference to `ost::XMLStream::comment(unsigned char const*, unsigned long)' CMakeFiles/eval_brd_a.dir/device_db.o:(.rodata._ZTV9Device_db[vtable for Device_db]+0x50): undefined reference to `ost::XMLStream::startDocument()' CMakeFiles/eval_brd_a.dir/device_db.o:(.rodata._ZTV9Device_db[vtable for Device_db]+0x58): undefined reference to `ost::XMLStream::endDocument()' CMakeFiles/eval_brd_a.dir/device_db.o:(.rodata._ZTV9Device_db[vtable for Device_db]+0x68): undefined reference to `Device_db::endElement(unsigned char const*)' CMakeFiles/eval_brd_a.dir/device_db.o:(.rodata._ZTI9Device_db[typeinfo for Device_db]+0x10): undefined reference to `typeinfo for ost::XMLStream'
kozzi avatar 31.5.2008 17:07 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: C++ && CMake && CommonCpp
Jo tak potom pomuze rada vyse ktera popisuje jak pridat danou knihovnu do projektu
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
31.5.2008 17:39 Radim Antihulán
Rozbalit Rozbalit vše Re: C++ && CMake && CommonCpp
Myslíš tohle ?
#need to link to some other libraries ? just add them here
# TARGET_LINK_LIBRARIES(eval_brd_a)

Tak tam jsem zkušel napsat všchno možný i nemožný, včetně absolutní cesty k tomu modulu a nijak to nepomohlo. Akorát to napsalo, že to ten soubor nemůže najít. To je jedno, já to obejdu, vykašlu se CMake. Google nic nevěděl. Díky za snahu !
Luboš Doležel (Doli) avatar 31.5.2008 17:49 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: C++ && CMake && CommonCpp
Akorát to napsalo, že to ten soubor nemůže najít.
Tak jste to musel napsat blbě. To pak nebude chyba CMake a ani autotools to zázračně nevyřeší.
31.5.2008 18:11 Radim Antihulán
Rozbalit Rozbalit vše Re: C++ && CMake && CommonCpp
Tak dobře, tady je ústřižek z výpisu "qlist commoncpp" (Vypíše obsah balíčku na Gentoo Linuxu):
/usr/include/cc++/objlink.h
/usr/include/cc++/objmap.h
/usr/include/cc++/objsync.h
/usr/include/cc++/oststring.h
/usr/include/cc++/template.h
/usr/include/cc++/pointer.h
/usr/lib64/libccgnu2-1.6.so.0.0.1
/usr/lib64/libccgnu2-1.6.so.0
/usr/lib64/libccgnu2.so
/usr/lib64/libccgnu2.la
/usr/lib64/libccgnu2.a
/usr/lib64/libccext2-1.6.so.0.0.1
/usr/lib64/libccext2-1.6.so.0
/usr/lib64/libccext2.so
/usr/lib64/libccext2.la
/usr/lib64/libccext2.a
/usr/lib64/pkgconfig/libccgnu2.pc
/usr/lib64/pkgconfig/libccext2.pc
/usr/share/aclocal/ost_check2.m4
/usr/share/info/commoncpp2.info.bz2

Upravuju CMakeLists.txt:
1. TARGET_LINK_LIBRARIES(eval_brd_a libccgnu2.so)
--> Ta stejná chyba
2. TARGET_LINK_LIBRARIES(eval_brd_a libccext2.so)
--> Kompilace úspěšná (sakra toho druhýho souboru jsem si napoprvé nevšim)


No tak jo, vyhráli jste, no :) ! Díky moc za pomoc !
(V takových chvílich jsem rád, že nevystupuju pod vlastním jménem :D )
31.5.2008 18:27 Boris Dušek | skóre: 22 | blog: everything
Rozbalit Rozbalit vše Re: C++ && CMake && CommonCpp
Zkusil bych ještě místo "libccext2.so" linkovat vůči "ccext2" - je to čistší (to "lib" na začátku a ".so" na konci tam doplní CMake sám, protože ví, že se kompiluje na Linuxu, a i na jiných platformách tam doplní jiné správné řetězce - třeba ".dll" na Windows, nebo ".dylib" na Mac OS X).
vim ~/.emacs
31.5.2008 19:02 Radim Antihulán
Rozbalit Rozbalit vše Re: C++ && CMake && CommonCpp
Skvělé, funguje to přesně tak jak jste předpověděl. Kde mohu být ochytřen o tuto magii ? (V manuálu CMake ?)

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.