sonnenblen.de - Das unabhängige Sun User Forum
Software => Programmieren, Kompilieren => Thema gestartet von: kotzkroete am 08. Juli 2007, 11:32:44
-
Hi,
Ich bin grad dabei centericq zu compilen, aber ich habe Probleme mit den curses.
Das ist der Kompiliervorgang, der mir Fehler bereitet:
g++ -g -O2 -I/usr/local/include -o centericq -L../connwrap-0.1 -L../firetalk-0.1 -L../kkconsui-0.1 -L../kkstrtext-0.1 -L../kksystr-0.1 -L../libgadu-0.1 -L../libicq2000-0.1 -L../libjabber-0.1 -L../libmsn-0.1 -L../libyahoo2-0.1 centericq.o icqcontact.o icqgroups.o eventmanager.o icqdialogs.o icqhist.o imexternal.o imcontact.o imlogger.o accountmanager.o icqcontacts.o icqmlist.o imcontroller.o icqconf.o imevents.o impgp.o icqface.o centermain.o icqgroup.o ../src/hooks/libhooks.a -lconnwrap -lfiretalk -lkkconsui -lkkstrtext -lkksystr -llibgadu -llibicq2000 -llibjabber -llibmsn -llibyahoo2 ../intl/libintl.a -L/usr/local/lib -lcurl -fPIC -L/usr/local/lib -R/usr/local/lib -R/usr/lib -L/usr/lib -R/usr/openwin/lib -L/usr/openwin/lib -L/usr/local/ssl/lib -R/usr/local/ssl/lib -L/usr/local/BerkeleyDB.4.2/lib -R/usr/local/BerkeleyDB.4.2/lib -L/usr/X11R6/lib -R/usr/X11R6/lib -L/usr/local/ssl/lib -lssl -lcrypto -lsocket -liconv -lnsl -lssl -lcrypto -lsocket -lnsl -ldl -lz -liconv -lcurses -lnsl -lsocket
Undefined first referenced
symbol in file
resizeterm ../kkconsui-0.1/libkkconsui.a(conscommon.o)
ESCDELAY ../kkconsui-0.1/libkkconsui.a(conscommon.o)
use_default_colors ../kkconsui-0.1/libkkconsui.a(conscommon.o)
ld: fatal: Symbol referencing errors. No output written to centericq
resizeterm, ESCDELAY und use_default_colors sind folgendermassen in ncurses/curses.h deklariert, die ich manuell noch eingebunden habe:
extern NCURSES_EXPORT(int) resizeterm (int, int);
extern NCURSES_EXPORT_VAR(int) ESCDELAY; /* ESC expire time in milliseconds */
extern NCURSES_EXPORT(int) use_default_colors (void);
und die libcurses, die mit -lcurses vermutlich eingebunden wird, habe ich in /usr/lib.
Also warum sind die alle undefined?
Edit: Also ich habs nun mit -lncurses compilen koennen. Jetzt kriege ich segemntation faults :/
-
Mmh...die Anwendung kenne ich nicht und Entwickler-Doku habe ich auf die Kürze nicht finden können. Versuchen wir mal die Ausgaben zu analysieren:
1.
resizeterm, ESCDELAY und use_default_colors sind folgendermassen in ncurses/curses.h deklariert, die ich manuell noch eingebunden habe:
Welche Vorbedingungen müssen denn erfüllt sein, um die textbasierte ICQ-Anwendung erfolgreich übersetzen zu können (curses.h oder ncurses.h )?
2.
extern NCURSES_EXPORT(int) resizeterm (int, int);
extern NCURSES_EXPORT_VAR(int) ESCDELAY; /* ESC expire time in milliseconds */
extern NCURSES_EXPORT(int) use_default_colors (void);
Ich bin mit deinem Konstrukt nicht besonders vertraut. Aber bei dem Code, den du eingebunden hast, könnte zum einen der Rückgabetyp nach dem Identifier "extern" fehlen und du versuchst den Funktionen mittles dem Schlüsselwort "extern" einen neuen Namen geben zu wollen. Ist das überhaupt zulässig? Meines Wissens nicht. Hier ein Beispiel zur Verwendung von "extern".
Datei 1: main.c
#include <stdio.h>
/* Deklarationsteil */
extern int get_myglobal();
void set_myglobal(int nval);
int myglobal;
int main(void)
{
myglobal = 10;
printf("%d\n", get_myglobal());
set_myglobal(20);
printf("%d\n", get_myglobal());
return 0;
}
/* Definitionsteil */
void set_myglobal(int nval)
{
myglobal = nval;
}
Datei 2: extfunc.c
extern int myglobal;
/* Deklarationsteil */
int get_myglobal();
/* Definitionsteil */
int get_myglobal()
{
return myglobal;
}
Mit diesen Anweisungen deklarierst du Variablen/Platzhalter auf Variable, die in externen/anderen Modulen definiert wurden. Wo sind denn die Funktion resizeterm(), die Konstante ESCDELAY und die Funktion use_default_colors() definiert ?
3.
ld: fatal: Symbol referencing errors. No output written to centericq
Falls zu einer externen Variablendeklaration in keiner anderen Datei eine Definition (sprich: geschriebener Code) zu finden ist, gibt es eine Fehler beim Linken ("ld").
$ cc -o prog main.c extfunc.c
$ ./prog
myglobal=10
myglobal=20
Gruß
escimo
-
Siehe edit. Ich hab nun -lnucrses benutzt. Jetzt kriege ich segmentation faults.