Software > Programmieren, Kompilieren
centericq, Problem mit curses
(1/1)
kotzkroete:
Hi,
Ich bin grad dabei centericq zu compilen, aber ich habe Probleme mit den curses.
Das ist der Kompiliervorgang, der mir Fehler bereitet:
--- Code: ---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
--- Ende Code ---
resizeterm, ESCDELAY und use_default_colors sind folgendermassen in ncurses/curses.h deklariert, die ich manuell noch eingebunden habe:
--- Code: ---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);
--- Ende Code ---
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 :/
escimo:
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.
--- Zitat ---resizeterm, ESCDELAY und use_default_colors sind folgendermassen in ncurses/curses.h deklariert, die ich manuell noch eingebunden habe:
--- Ende Zitat ---
Welche Vorbedingungen müssen denn erfüllt sein, um die textbasierte ICQ-Anwendung erfolgreich übersetzen zu können (curses.h oder ncurses.h )?
2.
--- Zitat ---
--- Code: (c) ---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);
--- Ende Code ---
--- Ende Zitat ---
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
--- Code: (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;
}
--- Ende Code ---
Datei 2: extfunc.c
--- Code: (c) ---extern int myglobal;
/* Deklarationsteil */
int get_myglobal();
/* Definitionsteil */
int get_myglobal()
{
return myglobal;
}
--- Ende Code ---
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.
--- Zitat ---
--- Code: ---ld: fatal: Symbol referencing errors. No output written to centericq
--- Ende Code ---
--- Ende Zitat ---
Falls zu einer externen Variablendeklaration in keiner anderen Datei eine Definition (sprich: geschriebener Code) zu finden ist, gibt es eine Fehler beim Linken ("ld").
--- Code: ---$ cc -o prog main.c extfunc.c
$ ./prog
myglobal=10
myglobal=20
--- Ende Code ---
Gruß
escimo
kotzkroete:
Siehe edit. Ich hab nun -lnucrses benutzt. Jetzt kriege ich segmentation faults.
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln