Fehler beim Einbinden von pcap.h und mysql.h - "undefined reference to ..." trotz Angabe der entsprechenden Headerfiles
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hallo zusammen,
ich versuch gerade ein C++ Projekt mit KDevelop aufzusetzen, daß unter anderem
die pcap.h und die mysql.h mit einbinden soll. Leider bekomme ich beim
Compilieren immer Fehlermeldungen mit dem Inhalt
"Undefined reference to ..."
die sich alle auf Funktionen beziehen, die in o.g. Headerfiles definiert sind.
Ich habe mir mal die Verzeichnis-Includes angesehen und bemerkt, daß im
zugehörigen "g++"-Befehl das Verzeichnis "/usr/include" nicht mit includiert
wird. Die Fehler treten allesamt in meiner main.cpp auf. Sie verfügt im
Gegensatz zu den anderen .cpp-Files nicht über eine separate Headerdatei.
Deshalb habe ich hier die notwendigen Headerfiles direkt in der main.cpp
eingebunden. Jetzt stellt sich für mich die Frage, warum das
"/usr/include"-Verzeichnis nicht durch g++ beim compilieren dieser Datei mit
eingebunden wird. Ich poste hier mal einen Auszug der Fehlermeldungen:
- -----------------------------------<snip>----------------------------------------------------
*/usr/include/g++/backward/backward_warning.h:32:2: Warnung: #warning This
file includes at least one deprecated or antiquated header. Please consider
using one of the 32 headers found in section 17.4.1.2 of the C++ standard.
Examples include substituting the <X> header for the
Am Sonntag, 19. September 2004 18:31 schrieb Udo Gerhards:
ich versuch gerade ein C++ Projekt mit KDevelop aufzusetzen, daß unter anderem die pcap.h und die mysql.h mit einbinden soll. Leider bekomme ich beim Compilieren immer Fehlermeldungen mit dem Inhalt
"Undefined reference to ..."
*g++ -o nwarp nwarp.o nw_standarts.o nw_database.o nw_device.o nw_dev_storage.o -L/usr/lib/ -L/usr/lib/qt3/lib/ -L/usr/X11R6/lib/ -lqt-mt -lXext -lX11 -lm -lpthread *nwarp.o(.text+0x60): In function `main': *: undefined reference to `pcap_findalldevs' *nwarp.o(.text+0x145): In function `main': *: undefined reference to `pcap_lookupnet' *nw_database.o(.text+0xaf): In function `nw_database::nw_database[not-in-charge]()': *: undefined reference to `mysql_init' *nw_database.o(.text+0x195): In function `nw_database::nw_database[not-in-charge]()': *: undefined reference to `mysql_real_connect' *nw_database.o(.text+0x1aa): In function `nw_database::nw_database[not-in-charge]()': *: undefined reference to `mysql_errno' ...
Der Linker findet die Libs nicht, bei mysql dürfte es -lmysqlclient sein, bei pcap -lpcap ?
Ich habe mich auch schon gefagt, ob es eventuell daran liegt, daß mysql.h und pcap.h reinen C-Code enthalten und eventuell nicht unter KDevelop in einem C++-Projekt eingebunden werden können, aber das kann ich mir ehrlich gesagt nicht vorstellen.
-- Andreas
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Monday 20 September 2004 01:20, Andreas Winkelmann wrote:
Am Sonntag, 19. September 2004 18:31 schrieb Udo Gerhards:
ich versuch gerade ein C++ Projekt mit KDevelop aufzusetzen, daß unter anderem die pcap.h und die mysql.h mit einbinden soll. Leider bekomme ich beim Compilieren immer Fehlermeldungen mit dem Inhalt
"Undefined reference to ..."
*g++ -o nwarp nwarp.o nw_standarts.o nw_database.o nw_device.o nw_dev_storage.o -L/usr/lib/ -L/usr/lib/qt3/lib/ -L/usr/X11R6/lib/ -lqt-mt -lXext -lX11 -lm -lpthread *nwarp.o(.text+0x60): In function `main': *: undefined reference to `pcap_findalldevs' *nwarp.o(.text+0x145): In function `main': *: undefined reference to `pcap_lookupnet' *nw_database.o(.text+0xaf): In function `nw_database::nw_database[not-in-charge]()': *: undefined reference to `mysql_init' *nw_database.o(.text+0x195): In function `nw_database::nw_database[not-in-charge]()': *: undefined reference to `mysql_real_connect' *nw_database.o(.text+0x1aa): In function `nw_database::nw_database[not-in-charge]()': *: undefined reference to `mysql_errno' ...
Der Linker findet die Libs nicht, bei mysql dürfte es -lmysqlclient sein, bei pcap -lpcap ?
O.K., aber wo setz ich die Schalter, damit Kdevelop die entsprechenden Pfade inkludiert? Ich habe mir mal die Projektoptions vorgenommen und leider nichts gefunden, wo ich dem Linker mitteilen soll, welche Pfade eingebunden werden sollen. Gruß Udo - -- - ------------------------------------------------------------------------------------------------- Wir sind Bill Gates! Widerstand ist zwecklos! Sie werden assimiliert! Ihre Datenbestände werden den unseren hinzugefügt! - ------------------------------------------------------------------------------------------------- - -- -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2 (GNU/Linux) iD8DBQFBTuOEw91zS84Ugh8RAvhUAJ4lkIUS7irC69oiV/xPOgyAY04JiQCfUqTG AglfOiDQWdNF2ivJHA4pAts= =lc9V -----END PGP SIGNATURE-----
Am Montag, 20. September 2004 16:04 schrieb Udo Gerhards:
ich versuch gerade ein C++ Projekt mit KDevelop aufzusetzen, daß unter anderem die pcap.h und die mysql.h mit einbinden soll. Leider bekomme ich beim Compilieren immer Fehlermeldungen mit dem Inhalt
"Undefined reference to ..."
*g++ -o nwarp nwarp.o nw_standarts.o nw_database.o nw_device.o nw_dev_storage.o -L/usr/lib/ -L/usr/lib/qt3/lib/ -L/usr/X11R6/lib/ -lqt-mt -lXext -lX11 -lm -lpthread *nwarp.o(.text+0x60): In function `main': *: undefined reference to `pcap_findalldevs' *nwarp.o(.text+0x145): In function `main': *: undefined reference to `pcap_lookupnet' *nw_database.o(.text+0xaf): In function `nw_database::nw_database[not-in-charge]()': *: undefined reference to `mysql_init' *nw_database.o(.text+0x195): In function `nw_database::nw_database[not-in-charge]()': *: undefined reference to `mysql_real_connect' *nw_database.o(.text+0x1aa): In function `nw_database::nw_database[not-in-charge]()': *: undefined reference to `mysql_errno' ...
Der Linker findet die Libs nicht, bei mysql dürfte es -lmysqlclient sein, bei pcap -lpcap ?
O.K., aber wo setz ich die Schalter, damit Kdevelop die entsprechenden Pfade inkludiert? Ich habe mir mal die Projektoptions vorgenommen und leider nichts gefunden, wo ich dem Linker mitteilen soll, welche Pfade eingebunden werden sollen.
Pfade mit "-L/pfad/zum/verzeichnis". Libs mit "-llibname_ohne_lib" Für Mysql z.B.: "-L/usr/lib/mysql -lmysqlclient" Bei den LinkerFlags (LDFLAGS). -- Andreas
moin moin, Am Montag, 20. September 2004 16:04 schrieb Udo Gerhards: [...]
Der Linker findet die Libs nicht, bei mysql dürfte es -lmysqlclient sein, bei pcap -lpcap ?
O.K., aber wo setz ich die Schalter, damit Kdevelop die entsprechenden Pfade inkludiert? Ich habe mir mal die Projektoptions vorgenommen und leider nichts gefunden, wo ich dem Linker mitteilen soll, welche Pfade eingebunden werden sollen.
Unter dem Menupunkt Projekt->Einstellungen->configure kannst Du das machen. Ciao Andre
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 ...
Unter dem Menupunkt Projekt->Einstellungen->configure kannst Du das machen.
Ciao
Andre
Äh sorry, daß ich die Frage noch nicht abschliessen kann, aber bei mir gibts leider den genannten Punkt nicht. Ich habe irgendwann mal einen Update auf Kde 3.2.3 gemacht und seitdem ist mein Kdevelop in Englisch. Unter Project->Project Options finde ich folgende Punkte: General Plugins Languages Project Documentations Subversion CvsService CVS New File Wizard C++Specific Run Options Make Options File Tree Doxygen Bookmarks Debbugger File Groups Ich vermute jetzt mal stark, daß die Einstellungen unter 'Make Options' gemacht werden müssen, aber dort finde ich nur die Möglichkeit, den Namen der auszuführenden Datei und ein paar andere Einstellungen einzustellen. Unter anderem gibts da auch die Möglichkeit sog. "Environment Variables" einzustellen. Wenn ich aber hier z.B. die Variable 'Test' mit dem Wert '-Lpcap' angebe, krieg ich beim compilieren trotzdem Fehlermeldungen bzw. es wird trotzdem die pcap nicht mit eingebunden. Gruß Udo - -- - ------------------------------------------------------------------------------------------------- Wir sind Bill Gates! Widerstand ist zwecklos! Sie werden assimiliert! Ihre Datenbestände werden den unseren hinzugefügt! - ------------------------------------------------------------------------------------------------- - -- -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2 (GNU/Linux) iD8DBQFBUBA1w91zS84Ugh8RAoenAJ948LYj4fygd+xrcl3bU/fxDV1lYQCgmSWf s26L4CeoJop2I+t2Kes4Qoo= =xOni -----END PGP SIGNATURE-----
Am Dienstag, 21. September 2004 13:27 schrieb Udo Gerhards:
Unter dem Menupunkt Projekt->Einstellungen->configure kannst Du das machen.
daß ich die Frage noch nicht abschliessen kann, aber bei mir gibts leider den genannten Punkt nicht. Ich habe irgendwann mal einen Update auf Kde 3.2.3 gemacht und seitdem ist mein Kdevelop in Englisch.
Unter Project->Project Options
finde ich folgende Punkte:
General Plugins Languages Project Documentations Subversion CvsService CVS New File Wizard C++Specific
Genau hier zwischen ist der Punkt, den Andre ansprach ;-)
Run Options Make Options File Tree Doxygen Bookmarks Debbugger File Groups
Ich vermute jetzt mal stark, daß die Einstellungen unter 'Make Options' gemacht werden müssen, aber dort finde ich nur die Möglichkeit, den Namen der auszuführenden Datei und ein paar andere Einstellungen einzustellen. Unter anderem gibts da auch die Möglichkeit sog. "Environment Variables" einzustellen. Wenn ich aber hier z.B. die Variable 'Test' mit dem Wert '-Lpcap' angebe, krieg ich beim compilieren trotzdem Fehlermeldungen bzw. es wird trotzdem die pcap nicht mit eingebunden.
Woraus besteht denn Dein Projekt? Setzt Du überhaupt configure ein? Oder hast Du ein einfaches Makefile? Oder ganz ohne? Klick doch mal alle Einstellungen durch, ob irgendwo LDFLAGS auftaucht. Vielleicht sind die Optionen nur verschoben worden. Abgesehen davon muss es ein kleines L "l" sein. "-lpcap" Ein grosses L "L" setzt den Pfad zu den Libs, nicht die Lib selbst. -- Andreas
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Tuesday 21 September 2004 13:49, Andreas Winkelmann wrote: ...
Genau hier zwischen ist der Punkt, den Andre ansprach ;-)
Run Options Make Options File Tree Doxygen Bookmarks Debbugger File Groups
...
Woraus besteht denn Dein Projekt? Setzt Du überhaupt configure ein? Oder hast Du ein einfaches Makefile? Oder ganz ohne?
Soweit ich jetzt feststellen konnte, ohne config-File und nur mit Makefile
Klick doch mal alle Einstellungen durch, ob irgendwo LDFLAGS auftaucht. Vielleicht sind die Optionen nur verschoben worden.
Nein, taucht nirgendwo auf.
Abgesehen davon muss es ein kleines L "l" sein. "-lpcap" Ein grosses L "L" setzt den Pfad zu den Libs, nicht die Lib selbst.
O.K. war bloß ein Tippfehler von mir
-- Andreas
Ich habe jetzt mal die beiden l-Flags ('-lpcap -lmysqlclient') direkt im Makefile eingegegeben und jetzt haben sich zumindest mal die Fehlermeldungen geändert. Jetzt meckert er mit undefined reference bei einer meiner eigenen Files. Das werde ich mir nochmal anschauen. Kann gut sein, daß ich noch irgendwo ein Headerfile vergessen habe zu includieren. BTW: Wenn Kdevelop standartmäßig ein Projekt ohne 'configure' anlegt, wie krieg ich das dann im File Wizard hin, daß ein solches File angelegt wird. Vielleicht taucht dann auch der fehlende Punkt im Menue auf. Gruß Udo - -- - ------------------------------------------------------------------------------------------------- Wir sind Bill Gates! Widerstand ist zwecklos! Sie werden assimiliert! Ihre Datenbestände werden den unseren hinzugefügt! - ------------------------------------------------------------------------------------------------- - -- -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2 (GNU/Linux) iD4DBQFBUCHaw91zS84Ugh8RAhyTAJ4/LLwoQKprEBDus87qR+3jRcic1wCYtiSw OvFEfiR2RS/RHGjywRml5A== =Cw6w -----END PGP SIGNATURE-----
Moin moin, ich habe jetzt ein ähnliches Problem mit einem Projekt. Der Punkt ist hier bei mir auch weg ;(( Beim rumspielen mit CVS habe ich einige Dateien ,sagen wir mal verloren ... (Ich habe zwar noch 'nen Backup, möchte nun aber auch wissen wie man das wieder hinbekommt!) Um das zu beheben habe ich ein neues Projekt angelegt, nicht wirklich schön ;( Musste sämtliche Einstellungen neu machen, Dateien adden usw.... Bei mir gab es noch das "configure" Skript, von der Konsole aufgerufen und ein neues Makefile wurde erstellt, die Einstellen für die Libs, etc. sind aber auch noch weg! Vermutlich bleibt nur der Weg sich mit automake & autoconf zu befassen! Am Dienstag, 21. September 2004 14:42 schrieb Udo Gerhards:
On Tuesday 21 September 2004 13:49, Andreas Winkelmann wrote: BTW: Wenn Kdevelop standartmäßig ein Projekt ohne 'configure' anlegt, wie krieg ich das dann im File Wizard hin, daß ein solches File angelegt wird. Vielleicht taucht dann auch der fehlende Punkt im Menue auf.
Das suche ich auch gerade, normal ist immer unter dem Menu "Erstellen" eine Option "automake & Konsorten ausführen"... Danach konnte ich bislang immer "configure" ausführen. Das fehlt bei meinen kaputten Projekt auch. Ciao Andre
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Wednesday 22 September 2004 13:00, Andre Heine wrote:
Moin moin,
ich habe jetzt ein ähnliches Problem mit einem Projekt. Der Punkt ist hier bei mir auch weg ;((
Beim rumspielen mit CVS habe ich einige Dateien ,sagen wir mal verloren ... (Ich habe zwar noch 'nen Backup, möchte nun aber auch wissen wie man das wieder hinbekommt!)
Um das zu beheben habe ich ein neues Projekt angelegt, nicht wirklich schön ;( Musste sämtliche Einstellungen neu machen, Dateien adden usw....
Bei mir gab es noch das "configure" Skript, von der Konsole aufgerufen und ein neues Makefile wurde erstellt, die Einstellen für die Libs, etc. sind aber auch noch weg!
Vermutlich bleibt nur der Weg sich mit automake & autoconf zu befassen!
Am Dienstag, 21. September 2004 14:42 schrieb Udo Gerhards:
On Tuesday 21 September 2004 13:49, Andreas Winkelmann wrote: BTW: Wenn Kdevelop standartmäßig ein Projekt ohne 'configure' anlegt, wie krieg ich das dann im File Wizard hin, daß ein solches File angelegt wird. Vielleicht taucht dann auch der fehlende Punkt im Menue auf.
Das suche ich auch gerade, normal ist immer unter dem Menu "Erstellen" eine Option "automake & Konsorten ausführen"... Danach konnte ich bislang immer "configure" ausführen.
Das fehlt bei meinen kaputten Projekt auch.
Ciao
Andre
Hmmm, komisches Eigenleben von KDevelop. ;) Vielleicht findet sich ja noch wer, der uns da weiterhelfen kann. Gruß Udo - -- - ------------------------------------------------------------------------------------------------- Wir sind Bill Gates! Widerstand ist zwecklos! Sie werden assimiliert! Ihre Datenbestände werden den unseren hinzugefügt! - ------------------------------------------------------------------------------------------------- - -- -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2 (GNU/Linux) iD8DBQFBUf7uw91zS84Ugh8RAjNKAJ0ZIizWILDT7grU8F+b1bvUBEAg7gCgoYhO FKVCmp/igvgDX26DboN0Zbc= =qh3A -----END PGP SIGNATURE-----
participants (3)
-
Andre Heine
-
Andreas Winkelmann
-
Udo Gerhards