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?
Sie müssen -l
Optionen am Ende der Befehlszeile übergeben:
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.
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.
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:
Wenn Sie die Sequenz verwechseln, wird es nicht funktionieren ...
%Vor%undefinierter Verweis auf 'unctrl'
Das funktioniert natürlich auch, wenn Sie die: lib-Syntax
verwendenDies 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
zurückcur_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 aufcur_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 auftparm' /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 aufcur_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 aufcur_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 auftparm' /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 aufcur_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 aufcur_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 aufcur_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 aufcur_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 aufcur_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 Funktionset_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 Funktionset_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 Funktionwhline': (.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 Funktionwhline': (.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 Funktionwadd_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 Funktionwadd_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 Funktionwecho_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 Funktionwecho_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 Funktionwunctrl': (.text+0x30): undefined reference to
unctrl ' collect2: Fehler: ld gab 1 Exit-Status
Tags und Links c gcc compiler-construction ncurses static-libraries