ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > Linker Problem | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
19.12.2004, 13:33 Uhr Kaesebroetchen Posts: 643 Nutzer |
Hi, ich bekomme beim linken folgenden Fehler: NewGUI_Functions.o(.text+0xaa4): undefined reference to 'TEXTFIELD_GetClass' Mein MakeFile sieht so aus: # Generated by GUICreator - © by Markus Hillenbrand CFLAGS = -O DEFS = LDFLAGS = LIBS = amiga CC = gcc OBJECTS = NewGUI.o NewGUI_Functions.o NewGUI_Main.o NewGUI_temp.o CCFLAGS = -I. -I$(srcdir) all: $(OBJECTS) gcc -o NewGUI $(OBJECTS) NewGUI.o:NewGUI.c NewGUI_Functions.o:NewGUI_Functions.c NewGUI_temp.o:NewGUI_temp.c NewGUI_Main.o:NewGUI_Main.c Wie man sehen kann wurde der Quellcode vom GUI Creator erstellt. Einziger Fehler beim compilieren war das er die <proto/alib.h> nicht finden konnte. Nachdem ich die auskommentiert habe, compiliert es fehlerfrei. Leider habe ich keinen blassen Schimmer wo der Fehler liegt. Googeln brachte nur einen Eintrag und da ging es um Reaction. GUI_Creator ist jedoch von 1996, also denke ich mal das es damit nichts zu tun hat.. [ - Antworten - Zitieren - Direktlink - ] |
19.12.2004, 14:41 Uhr thomas Posts: 7718 Nutzer |
Du mußt proto/textfield.h mit includen. Und für die amiga.lib mußt du clib/alib_protos.h einfügen. Ein proto/alib.h gibt es nicht, denn es ist ja eine statische Bibliothek. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Antworten - Zitieren - Direktlink - ] |
19.12.2004, 15:05 Uhr Kaesebroetchen Posts: 643 Nutzer |
Ich habe das mal schnell getestet, aber daran lag es wohl nicht. Meine Includes sehen so aus: /* Includes used by GUICreator */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <exec/types.h> #include <exec/memory.h> #include <gadgets/textfield.h> #include <graphics/gfxbase.h> #include <intuition/icclass.h> #include <intuition/gadgetclass.h> #include <datatypes/pictureclass.h> #ifdef __GNUC__ #include <proto/asl.h> #include <proto/dos.h> #include <proto/exec.h> #include <clib/alib_protos.h> #include <proto/utility.h> #include <proto/graphics.h> #include <proto/diskfont.h> #include <proto/gadtools.h> #include <proto/datatypes.h> #include <proto/intuition.h> #include <proto/textfield.h> #else #include <clib/asl_protos.h> #include <clib/dos_protos.h> #include <clib/exec_protos.h> #include <clib/alib_protos.h> #include <clib/utility_protos.h> #include <clib/graphics_protos.h> #include <clib/diskfont_protos.h> #include <clib/gadtools_protos.h> #include <clib/datatypes_protos.h> #include <clib/intuition_protos.h> #include <clib/textfield_protos.h> #endif #ifdef __MAXON__ #include <pragma/asl_lib.h> #include <pragma/dos_lib.h> #include <pragma/exec_lib.h> #include <pragma/utility_lib.h> #include <pragma/graphics_lib.h> #include <pragma/diskfont_lib.h> #include <pragma/gadtools_lib.h> #include <pragma/datatypes_lib.h> #include <pragma/intuition_lib.h> #include <pragma/textfield_lib.h> #endif #ifdef __STORM__ #include <pragma/asl_lib.h> #include <pragma/dos_lib.h> #include <pragma/exec_lib.h> #include <pragma/utility_lib.h> #include <pragma/graphics_lib.h> #include <pragma/diskfont_lib.h> #include <pragma/gadtools_lib.h> #include <pragma/datatypes_lib.h> #include <pragma/intuition_lib.h> #include <pragma/textfield_lib.h> #endif #ifdef _DCC #include <pragmas/textfield_pragmas.h> #endif [ - Antworten - Zitieren - Direktlink - ] |
19.12.2004, 17:05 Uhr whose Posts: 2156 Nutzer |
Du linkst das aber nicht gegen eine statische Support-Bibliothek, oder? Ich meine sowas in der Art wie reaction.lib für SAS-C. Anders läßt sich das Linker-Problem kaum noch erklären. Grüße [ - Antworten - Zitieren - Direktlink - ] |
19.12.2004, 17:56 Uhr Kaesebroetchen Posts: 643 Nutzer |
Nein, zumindest glaube ich das nicht. Mit dem nackten gcc zu arbeiten ist nicht gerade meine Stärke. Um so mehr habe ich mich gefreut als ich den GUIcreator 2.0 entdeckt habe der mir den kompletten Code mit MakeFile ausspuckt. Das Compilieren klappt ja auch ganz gut, nur das linken eben nicht [ - Antworten - Zitieren - Direktlink - ] |
19.12.2004, 20:42 Uhr whose Posts: 2156 Nutzer |
Zitat: Hm, das ist scho seltsam... im Mom weiß ich da auch net so Recht weiter, der nackte GCC ist nämlich auch nicht meine Stärke Hast Du mal in die Optionen geschaut, wie man das dazulinken der amiga.lib bewerkstelligt? Sieht mir nämlich nicht so aus, als würde das passieren. Von makefiles hab ich auch nicht so den Plan, da müßt ich erst mal nachschauen. Grüße [ Dieser Beitrag wurde von whose am 19.12.2004 editiert. ] [ Dieser Beitrag wurde von whose am 19.12.2004 editiert. ] [ - Antworten - Zitieren - Direktlink - ] |
19.12.2004, 22:23 Uhr Holger Posts: 8116 Nutzer |
Zitat:Normalerweise -lamiga (<minus>-<klein L>-<a>-<m>-<i>-<g>-<a>) mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
19.12.2004, 22:44 Uhr whose Posts: 2156 Nutzer |
Zitat: Ok, deutlicher gehts wirklich nicht mehr Grüße [ - Antworten - Zitieren - Direktlink - ] |
19.12.2004, 23:07 Uhr Holger Posts: 8116 Nutzer |
Zitat:Iss ne Angewohnheit, um Posting nicht zu kurz werden zu lassen Nee, im Ernst, je nach Schriftsatz sind Dinge wie kleines L und die Eins oder Bindestrich und weiß-auch-nicht-mehr problematisch. Insbesondere, wo das Forumskript ja z.B. auch bestimmte Anführungszeichen automatisch in andere umwandelt. Da gewöhnt man sich dann sowas an. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
20.12.2004, 00:01 Uhr Kaesebroetchen Posts: 643 Nutzer |
@holger Ich habe ja einfach nur make ausgeführt und im Makefile (siehe erstes Posting) steht LIBS = amiga Und ich denke mal wenn er die nicht Linken würde, dann würde doch wohl deutlich mehr als ein Fehler ausgegeben, oder ? Vielleicht hat ja jemand mit gcc Erfahrung mal Lust und Zeit den Fehler zu reproduzieren ? Der Code ist einfach nur ein leeres Fenster, mit gui_creator2.0 erzeugt. Compiler ist der GCC 3.3.1 aus der devkits Umgebung vom Golded Demo. [ - Antworten - Zitieren - Direktlink - ] |
20.12.2004, 00:29 Uhr Holger Posts: 8116 Nutzer |
Zitat:Davon weiß doch aber gcc nichts. gcc kennt nur das, was in der Kommandozeile angegeben ist. Und die Kommandozeile ist die, die von make ausgegeben wird. Es kann sein, daß in der Konfiguration von gcc steht, daß er diese Bibliothek immer linken sollen, aber wetten würde ich darauf nicht. Die Amiga-Lib ist kein Muß. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
20.12.2004, 13:06 Uhr gni Posts: 1106 Nutzer |
Zitat:Doch, proto/alib.h war mal Bestandteil der Includes für den GCC. Das amiga.lib eine statische Bibliothek ist, spielt keine Rolle für die Existenz eines proto/ Headers. [ - Antworten - Zitieren - Direktlink - ] |
20.12.2004, 13:15 Uhr gni Posts: 1106 Nutzer |
Zitat:Das verät einem die Option -v. In diesem Fall lautet die Antwort das automatisch gegen libamiga.a gelinkt wird. Zitat:Für Amiga-Programme eigentlich doch. In seinem Fall liegt das Problem aber nicht an amiga.lib. [ Dieser Beitrag wurde von gni am 20.12.2004 editiert. ] [ - Antworten - Zitieren - Direktlink - ] |
20.12.2004, 13:40 Uhr Kaesebroetchen Posts: 643 Nutzer |
Ich hab mal mit grep gespielt und nach TEXTFIELD_GetClass gesucht und bekam folgendes Ergebnis: Neuer Shell-Prozeß 3 3.Amiga_Dev:> grep -r TEXTFIELD_GetClass * Binary file C/GUICreator_C matches Demos/Tutorial/Textfields.c: tfc = TEXTFIELD_GetClass(); Demos/Sound_Functions.c: textfield = (struct Gadget *)NewObject(TEXTFIELD_GetClass(), NULL, Demos/Printer_Functions.c: textfield = (struct Gadget *)NewObject(TEXTFIELD_GetClass(), NULL, Demos/ManageCDPics_Functions.c: textfield = (struct Gadget *)NewObject(TEXTFIELD_GetClass(), NULL, Demos/Calculator_Functions.c: textfield = (struct Gadget *)NewObject(TEXTFIELD_GetClass(), NULL, devkits/sdk/classic/ndk_39/include/include_h/reaction/reaction_macros. h:#define TextFieldObject NewObject( TEXTFIELD_GetClass(), NULL Binary file devkits/compilers/vbcc/classic/latest/targets/ppc-powerup/lib/libamiga s.a matches Binary file devkits/compilers/vbcc/classic/latest/targets/ppc-powerup/lib/libamiga .a matches Binary file devkits/compilers/vbcc/classic/latest/targets/ppc-morphos/lib/libamiga s.a matches Binary file devkits/compilers/vbcc/classic/latest/targets/ppc-morphos/lib/libamiga .a matches devkits/compilers/vbcc/classic/latest/targets/m68k-amigaos/include/inl ine/textfield_protos.h:Class * __TEXTFIELD_GetClass(__reg("a6") struct Library *)="tjsrt-30(a6)"; devkits/compilers/vbcc/classic/latest/targets/m68k-amigaos/include/inl ine/textfield_protos.h:#define TEXTFIELD_GetClass() __TEXTFIELD_GetClass(TextFieldBase) Binary file devkits/compilers/vbcc/classic/latest/targets/m68k-amigaos/lib/amigas. lib matches Binary file devkits/compilers/vbcc/classic/latest/targets/m68k-amigaos/lib/amiga.l ib matches Binary file devkits/compilers/vbcc/classic/latest/targets/ppc-warpos/lib/amiga.lib matches Binary file devkits/compilers/vbcc/classic/latest/vbcc/targets/ppc-warpos/lib/amig a.lib matches devkits/compilers/gcc/classic/stable/os-include/clib/textfield_protos. h:Class *TEXTFIELD_GetClass(void); devkits/compilers/gcc/classic/stable/os-include/reaction/reaction_macr os.h:#define TextFieldObject NewObject( TEXTFIELD_GetClass(), NULL devkits/compilers/gcc/classic/stable/os-include/proto/textfield.h:Clas s *TEXTFIELD_GetClass(void); devkits/compilers/gcc/classic/stable_alt/os-include/reaction/reaction_ macros.h:#define TextFieldObject NewObject( TEXTFIELD_GetClass(), NULL Binary file GadToolsBox3/generators/c.generator matches 3.Amiga_Dev:> Ich kenn mich mit grep nicht so aus, aber mir ist aufgefallen, bei den "binary Files" nur die amiga.lib des vbcc aufgeführt wird. Kann es vielleicht sein, dass diese Funktion beim gcc fehlt ? [ - Antworten - Zitieren - Direktlink - ] |
20.12.2004, 15:15 Uhr gni Posts: 1106 Nutzer |
Zitat:Zwei Sachen fallen mir auf: proto/texfield.h sieht aus als ob es daß clib/ File ist und zweitens gibt es kein Inline für den GCC. Such/erstell Dir was passendes für den GCC und Dein Problem sollte verschwinden. Zitat:Definiere "fehlt". Das textfield.gadget ist ein 3rd-Party Produkt also mußt Du Dich selber um dessen Devkit und gegebenenfalls Anpassungen kümmern. Hier hast Du noch Glück: bist auf das GCC-Inline und passendes proto/ File ist alles da. [ - Antworten - Zitieren - Direktlink - ] |
20.12.2004, 17:38 Uhr Kaesebroetchen Posts: 643 Nutzer |
Achso, ich wusste nicht das Textfield extra eingerichtet werden muss. Wahrscheinlich hat das Installationsscript einen Fehler ? Wie auch immer, durch Glück habe ich jetzt einen Weg gefunden das Problem zu lösen. Für Interessierte: Der Fehler tritt nicht mehr auf, wenn man im Application Menü bei den About Einstellungen den Eintrag About.IFF entfernt. (Misteriös) Jetzt kann man einfach eine GUI gestalten, den Sourcecode speichern, eine Shell öffnen, make ausführen und schon hat man ein schickes lauffähiges Programm, dem man "nur" noch ein bisschen Funktionalität verpassen muss. Das wird aber wohl nur so lange etwas nützen, bis man versucht tatsächlich ein Textfield zu benutzen. Dafür muss man sich allerdings erst mal registrieren. [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Linker Problem | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |