Superuser

Autor Thema: centericq, Problem mit curses  (Gelesen 5451 mal)

Offline kotzkroete

  • Sobl Newbie
  • *
  • Beiträge: 42
centericq, Problem mit curses
« 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 :/
« Letzte Änderung: 08. Juli 2007, 18:19:17 von kotzkroete »

sonnenblen.de - Das unabhängige Sun User Forum

centericq, Problem mit curses
« am: 08. Juli 2007, 11:32:44 »

Offline escimo

  • Sobl Moderator
  • Sobl Guru
  • *****
  • Beiträge: 1674
  • SPARCstation 2
    • Youtube-Kanal opensparcbox.org
Re: centericq, Problem mit curses
« Antwort #1 am: 08. Juli 2007, 21:23:45 »
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:
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) [Auswählen]
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
Code: (c) [Auswählen]
#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
Code: (c) [Auswählen]
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.
Zitat
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
« Letzte Änderung: 08. Juli 2007, 21:26:52 von escimo »

Offline kotzkroete

  • Sobl Newbie
  • *
  • Beiträge: 42
Re: centericq, Problem mit curses
« Antwort #2 am: 08. Juli 2007, 22:48:21 »
Siehe edit. Ich hab nun -lnucrses benutzt. Jetzt kriege ich segmentation faults.