Verbinden Sie ncurses statisch mit dem Programm

7

Ich habe Probleme, ncurses statisch mit einem meiner Programme zu verknüpfen

Hier ist ein wirklich einfaches Beispielprogramm:

%Vor%

Wenn ich es mit

kompiliere %Vor%

Ich bekomme diese Fehler:

%Vor%

Ich bin ein wenig verwirrt, warum das nicht funktioniert. Was fehlt mir hier?

    
mdogg 18.08.2010, 17:30
quelle

3 Antworten

24

Sie müssen -l Optionen am Ende der Befehlszeile übergeben:

%Vor%

Wenn der Compiler auf -lfoo trifft, verbindet er alle Symbole aus foo , die von einer vorherigen Datei angefordert wurden. Wenn Sie -lfoo am Anfang setzen, wurde noch kein Symbol angefordert, daher wird kein Symbol verknüpft.

    
Gilles 18.08.2010, 17:46
quelle
5

Bearbeiten:

Ich denke, das eigentliche Problem besteht darin, dass Sie am Ende des Befehls die Option -l angeben müssen. Ich habe es einfach so versucht und den Fehler reproduziert. Wenn ich -l:libncurses.a am Ende der Zeile setze, funktioniert es. Alle ohne die Option -static BTW.

Ich denke, was passiert, ist, dass Sie eine dynamische Bibliothek für ncurses haben, aber Sie haben die Option -static verwendet, was bedeutet, dass Sie keine dynamischen -Bibliotheken verwenden. Ich vermute, dass Sie tatsächlich keine statische Version der Ncurses-Bibliothek haben, d. H. Eine Endung mit einem .a-Suffix.

Wenn Sie eine Verknüpfung mit der statischen Version (.a) von ncurses und nicht mit der dynamischen Version (.so) herstellen möchten, entfernen Sie vorübergehend den Symlink für libncurses.so, damit der Linker stattdessen die .a-Datei aufruft. Kopieren Sie alternativ die .a-Datei woanders und fügen Sie sie einem früheren Suchpfad hinzu.

Alternativ, wenn Ihr Linker dies unterstützt (zB ld ), können Sie -l:libncurses.a anstelle von -lncurses angeben.

    
Troubadour 18.08.2010 17:41
quelle
1

Ich habe gerade ein paar Stunden auf einem ARM-Prozessor verbracht und versucht, es zum Laufen zu bringen, da die akzeptierte Antwort bei mir nicht funktioniert hat.

Hier sind meine Ergebnisse:

Anscheinend

%Vor%

funktioniert auf einem x64-Prozessor, aber nicht auf einem ARM-Prozessor.

Als ich mit der obigen Zeile versuchte, bekam ich immer noch die "undefinierten Referenzfehler" (und noch viel mehr) des OP.

Sie müssen auch eine Verbindung mit libtinfo.a herstellen und beachten, dass die Reihenfolge zählt.
Dies ist die korrekte Befehlszeile, die funktioniert:

%Vor%

Wenn Sie die Sequenz verwechseln, wird es nicht funktionieren ...

%Vor%
  

undefinierter Verweis auf 'unctrl'

Das funktioniert natürlich auch, wenn Sie die: lib-Syntax

verwenden

Dies kompiliert

%Vor%

Dies kompiliert nicht

%Vor%

Oh, wie ich gcc mag ...
Dieses Programm hätte niemals den Kindergarten verlassen dürfen.

  

(. text + 0x2a8): undefinierter Verweis auf cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function init_pair ': (.text + 0x2ac): undefinierter Verweis auf    cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function init_pair ': (.text + 0x50a): undefinierter Verweis auf tparm' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function init_pair': (.text + 0x518): undefinierter Verweis auf    _nc_putp' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function init_color ': (.text + 0x552): undefinierter Verweis auf    cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function init_color ': (.text + 0x556): undefinierter Verweis auf    cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function init_color ': (.text + 0x5e4): undefinierter Verweis auf    tparm' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function init_color ': (.text + 0x5f2): undefinierter Verweis auf    _nc_putp' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function can_change_color ': (.text + 0x740): undefinierter Verweis auf    cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function can_change_color ': (.text + 0x744): undefinierter Verweis auf    cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function has_colors ': (.text + 0x768): undefinierter Verweis auf    cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function has_colors ': (.text + 0x76c): undefinierter Verweis auf    cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o): In function color_content ': (.text + 0x7c2): undefinierter Verweis auf    cur_term' /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o):(.text+0x7c6): more undefined references to cur_term 'folgen   /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o):   In der Funktion _nc_do_color': (.text+0x8de): undefined reference to tparm '   /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o):   In der Funktion _nc_do_color': (.text+0x8e6): undefined reference to tputs '   /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o):   In der Funktion _nc_do_color': (.text+0x958): undefined reference to tputs '   /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o):   In der Funktion set_foreground_color': (.text+0x62): undefined reference to tputs '   /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_color.o):   In der Funktion set_background_color': (.text+0xa2): undefined reference to tputs '   /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_hline.o):   In der Funktion whline': (.text+0xec): undefined reference to acs_map '   /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_hline.o):   In der Funktion whline': (.text+0xf0): undefined reference to acs_map '   /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_add_wch.o):   In der Funktion wadd_wch': (.text+0x4fe): undefined reference to TABSIZE '   /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_add_wch.o):   In der Funktion wadd_wch': (.text+0x502): undefined reference to TABSIZE '   /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_add_wch.o):   In der Funktion wecho_wchar': (.text+0x6d8): undefined reference to TABSIZE '   /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_add_wch.o):   In der Funktion wecho_wchar': (.text+0x6dc): undefined reference to TABSIZE '   /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../arm-linux-gnueabihf/libncursesw.a(lib_wunctrl.o):   In der Funktion wunctrl': (.text+0x30): undefined reference to unctrl '   collect2: Fehler: ld gab 1 Exit-Status

zurück
    
Stefan Steiger 29.09.2016 05:28
quelle