xcode und curses

H

Hugoderwolf

Aktives Mitglied
Thread Starter
Dabei seit
07.03.2003
Beiträge
349
Reaktionspunkte
0
Um ein Programm (C) für ein kleines Mikrocontroller-Projekt zu schreiben, will ich meine I/O-Libraries für Tasten und LC-Display auf dem iBook per curses simulieren. So kann ich das Hauptprogramm bequem am Book schreiben und testen und das dann irgendwann für den Controller zu Kompilieren.
Daher habe ich also zu Anfang mal die Funktionen meiner LCD-Library genommen und versucht, die für Curses umzubauen. Problem: Curses läuft nicht. Der Build verläuft ohne Fehler und beim ausführen kommt dann die Meldung

ZeroLink: unknown symbol '_stdscr'

hugo-sys has exited due to signal 6 (SIGABRT).

Ich gehe mal davon aus, dass die curses-lib nicht richtig gelinkt wird. Normalerweise würde ich also was entsprechendes ins Makefile schreiben, aber das gibt's bei Xcode nicht. Wo tu ich also den entsprechenden Hinweis hin?
 
Ohne, dass ich jetzt eine direkte Lösung hätte...

Zunächst hast du ein Linking-Problem, dir fehlt eine Bibliothek, in der das Symbol definiert ist.

Schalte mal ZeroLink aus, dann erhältst du den Fehler nicht erst zur Laufzeit. Dann google mal nach dem Symbol stdscr und suche die Lib, in der es enthalten ist, und binde sie ein.
 
blutfink schrieb:
Zunächst hast du ein Linking-Problem, dir fehlt eine Bibliothek, in der das Symbol definiert ist.

Ich hab das Gefühl die Lib ist da. Die Manpage von Curses gibt's, die curses.h ist offenbar auch existent, sonst würde es einen Fehler geben. Und das gesuchte Symbel stdscr steht auch nicht im Quellcode, er muss es also irgendwo her haben.

Schalte mal ZeroLink aus, dann erhältst du den Fehler nicht erst zur Laufzeit. Dann google mal nach dem Symbol stdscr und suche die Lib, in der es enthalten ist, und binde sie ein.

Was ist denn ZeroLink und wo schalte ich das aus? Wie auch immer, wenn ich von Hand kompiliere muss ich die Option "-lncurses" angeben. Dann wird auch brav kompiliert und das Programm verursacht bei Ausführung einen "Bus Error", was sich aber IMO wahrscheinlich als Programmierfehler meinerseits herausstellen wird. Ergo: Ich muss Xcode irgendwie beibringen, diese Option -lncurses beim Build zu benutzen.
 
was passiert, wenn du die anwendung im terminal startest?
 
Katana schrieb:
was passiert, wenn du die anwendung im terminal startest?

Es kommt die Gleiche Meldung. Habe jetzt nochmal folgenden Quellcode von einem Tutorial kopiert um Programmierfehler auszuschließen:

Code:
#include <curses.h>

int main()
{
        int c;
        initscr();   /*curses initialisieren*/
        keypad(stdscr,TRUE);
        while((c=getch()) == KEY_DOWN || c==KEY_UP || c==KEY_LEFT || c==KEY_RIGHT)
                  ;
        endwin();
        return 0;
}

Wenn ich das im Terminal kompiliere mit:
gcc -o cursestest main.c -lncurses

Dann funktioniert das Programm. Wenn ich es mit der Methode aus deinem Link in Xcode Kompiliere habe ich wieder diesen ZeroLink-Fehler. :(
 
Hugoderwolf schrieb:
Was ist denn ZeroLink und wo schalte ich das aus?
[...]
Ich muss Xcode irgendwie beibringen, diese Option -lncurses beim Build zu benutzen.

Links oben im "Groups & Files"-Panel klickst du doppelt auf dein Projekt (blaues Symbol). Dann kommt deine "Project Info". Dann wählst du den Tab "Styles". In der dann erscheinenden Liste machst du das Häkchen bei ZeroLink weg.

Dort findet sich auch ein Eintrag namens "Other Linker Flags". Dort trägst du -lncurses ein.
 
Ah supi danke! Das funzt. Man kann das Proggi zwar nicht von Xcode aus per Build&Run ausführen (Error opening terminal: unknown.) aber vom Terminal aus geht's.
 
Zurück
Oben Unten