amiga-news 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: 7716
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:
Original von Kaesebroetchen:
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


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:
Original von whose:
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.

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:
Original von Holger:

Normalerweise -lamiga (<minus>-<klein L>-<a>-<m>-<i>-<g>-<a>)


Ok, deutlicher gehts wirklich nicht mehr :lach:

Grüße


[ - Antworten - Zitieren - Direktlink - ]

19.12.2004, 23:07 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von whose:
Ok, deutlicher gehts wirklich nicht mehr :lach:

Iss ne Angewohnheit, um Posting nicht zu kurz werden zu lassen :D
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:
Original von Kaesebroetchen:
Ich habe ja einfach nur make ausgeführt und im Makefile (siehe erstes Posting) steht LIBS = amiga

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:
thomas:
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.

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:
Holger:
Es kann sein, daß in der Konfiguration von gcc steht, daß er diese Bibliothek immer linken sollen, aber wetten würde ich darauf nicht.

Das verät einem die Option -v. In diesem Fall lautet die Antwort das automatisch gegen libamiga.a gelinkt wird.
Zitat:
Die Amiga-Lib ist kein Muß.
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 *)="\tjsr\t-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:
Kaesebroetchen:
devkits/compilers/vbcc/classic/latest/targets/m68k-amigaos/include/inl ine/textfield_protos.h:
devkits/compilers/gcc/classic/stable/os-include/clib/textfield_protos. h:
Class *TEXTFIELD_GetClass(void);
devkits/compilers/gcc/classic/stable/os-include/proto/textfield.h:
Class *TEXTFIELD_GetClass(void);

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:
Kann es vielleicht sein, dass diese Funktion beim gcc fehlt ?
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.
.