Noch ein 'undefined reference to'-Problem

A

abstrux

Grünschnabel
Servus alle

Seit langem versuche ich, dsniff 2.3 auf meinem Suse 10.1 (gcc 4.1.0) Rechner zu compilieren+installieren. Nach einigen Hürden habe ich es geschafft, alle benötigten Packages zu compilieren und (fehlerfrei?!) zu installieren (Berkeley DB 1.85 ja ich weiss, hätte auch die aktuelle Version einfach 1.85-kompatibel compilieren können, Libnet 1.0.2a, Libnids 1.16 und Openssl).

shark:~/net-dsniff/dsniff-2.3 # ./configure (geht fehlerfrei)
shark:~/net-dsniff/dsniff-2.3 # make

Beim _linken_ von dsniff 2.3 bekomme ich folgenden Fehler:

gcc -o dsniff asn1.o base64.o buf.o hex.o magic.o mount.o pcaputil.o rpc.o tcp_raw.o trigger.o record.o dsniff.o decode.o decode_aim.o decode_citrix.o decode_cvs.o decode_ftp.o decode_hex.o decode_http.o decode_icq.o decode_imap.o decode_irc.o decode_ldap.o decode_mmxp.o decode_mountd.o decode_napster.o decode_nntp.o decode_oracle.o decode_ospf.o decode_pcanywhere.o decode_pop.o decode_portmap.o decode_postgresql.o decode_pptp.o decode_rip.o decode_rlogin.o decode_smb.o decode_smtp.o decode_sniffer.o decode_snmp.o decode_socks.o decode_tds.o decode_telnet.o decode_vrrp.o decode_yp.o decode_x11.o -lresolv -lnsl -lrpcsvc -L. -lmissing -L/usr/local/lib -lnids -lpcap -lnet -L/usr/local/ssl/lib -lssl -lcrypto
record.o: In function `record_init':
./record.c:167: undefined reference to `dbopen'
collect2: ld returned 1 exit status
make: *** [dsniff] Error 1

Habe dann auch das Makefile angepasst:

NIDSLIB = -L/usr/local/lib -lnids

DBINC =
DBLIB =

SSLINC = -I/usr/local/ssl/include

zu

NIDSLIB = -L/usr/local/lib -lnids

DBINC =
DBLIB = -ldb #mit DBLIB = -L/usr/lib -ldb auch schon probiert...

SSLINC = -I/usr/local/ssl/include

aber es kommt immer derselbe Fehler. Nach

shark:~/net-dsniff/dsniff-2.3 # nm /usr/lib/*/* > search_4_dbopen

finde ich in search_4_dbopen

...
/usr/lib/htdig_db/libhtdb.a:
...
db.o:
...
000000a0 t CDB___db_dbopen
...

und habe dann als gcc-Optionen im Makefile DBLIB = -L/usr/lib/htdig_db -lhtdb angepasst. Ergebnis: genau die gleiche Fehlermeldung (gcc-Aufruf von make wird nat. schon angepasst).

Leute, kann mir jemand helfen? Ich bin mit meinem Latein echt am Ende, will aber nicht aufgeben :-)

Danke erstmal...und Grüsse von Sam!
 
Sind die notwendigen Header in der record.c inkludiert?
 
Ja. Die Funktion ... dbopen(...) ist in db.c definiert. db.h ist in record.c inkludiert, ebenfalls die Headerfiles gemäss 'man dbopen'.
Aber: In db.h steht kein Prototyp von dbopen aber folgende (Makro-?)Zeile:

__BEGIN_DECLS
DB *dbopen __P((const char *, int, int, DBTYPE, const void *));

...any suggestions?
 
so, wie ich das verstehe, ist die genannte Zeile aus db.h eine Definnition einer Funktion (__P(const char* in, in, DBTYPE, const void*))
folglich id dbopen ein Datentyp/Structure.

ein Lösungsansastz, den ich über google gefunden habe:
2.5. Make dies with undefined symbol dbopen or __db185_open"?

Be sure to build Berkeley DB with ./configure --enable-compat185

BTW: An automatisch generierten Makefiles rumzuschrauben ist nicht immer eine gute Idee ;)

Grüße, Blender3D
 
Hm, dbopen ist schon eine Funktion, definiert in db.c

Aber ich habe das Problem anders gelöst: Berkeley DB in der aktuellen Version installiert, einfach im 1.85-kompatiblen Modus (wie von dir Blender3D vorgeschlagen) kompiliert und dsniff noch ein paar weitere Pfadangaben gegeben. Musste in einer dsniff-c-Datei wohl wegen einem anderen Problem noch eine zusätzliche Headerdatei einbinden, aber jetzt läuft das Ding wie geschmiert :-)

Danke euch allen! und einen guten Rutsch natürlich...
Sam
 

Ähnliche Themen

'libraryname': undefined reference to 'functionname'

XFCE freezes at startup

qt statisch linken

Ubuntu X / dbus problem

HP PSC 2175 - CUPS druckt nicht

Zurück
Oben