DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > c++ Probleme clib/alib_protos.h | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2006-03-22, 20:29 h Kaesebroetchen Posts: 643 User |
Hi, ich habe folgendes Problem: Ich möchte ein Aros C++ Programm entwickeln, leider bekomme ich vom Aros g++ folgende Fehlermeldung, wenn ich <clib/alib_protos.h> includire: code:Compiler: i686-aros Building Makefile: "C:CrossCompilerAmiDevCppAROS_CNCMakefile.win" Executing make clean rm -f main.o cnc.o serial.o Aros_CNC.exe i686-aros-g++.exe -c main.cpp -o main.o -I"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/lib/gcc-lib/i686-aros/3.3.1" -I"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/i686-aros/sys-include" In file included from /usr/local/amiga/i686-aros/sys-include/rexx/storage.h:19, from /usr/local/amiga/i686-aros/sys-include/clib/alib_protos.h:46, from main.cpp:14: /usr/local/amiga/i686-aros/sys-include/dos/dosextens.h:436: error: member ' DosList::<anonymous union>::<anonymous struct> DosList::<anonymous union>::dol_volume' with constructor not allowed in union In file included from main.cpp:14: /usr/local/amiga/i686-aros/sys-include/clib/intuition_protos.h:136: error: previous declaration of 'IPTR CallHookA(Hook*, void*, void*)' with C++ linkage /usr/local/amiga/i686-aros/sys-include/clib/alib_protos.h:59: error: conflicts with new declaration with C linkage /usr/local/amiga/i686-aros/sys-include/clib/intuition_protos.h:137: error: previous declaration of 'IPTR CallHook(Hook*, void*, ...)' with C++ linkage /usr/local/amiga/i686-aros/sys-include/clib/alib_protos.h:60: error: conflicts with new declaration with C linkage make.exe: *** [main.o] Error 1 Execution terminated Ich habe es auch mit <proto/alib.h> probiert, dabei kommt das hier heraus: code:Compiler: i686-aros Building Makefile: "C:CrossCompilerAmiDevCppAROS_CNCMakefile.win" Executing make clean rm -f main.o cnc.o serial.o Aros_CNC.exe i686-aros-g++.exe -c main.cpp -o main.o -I"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/lib/gcc-lib/i686-aros/3.3.1" -I"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/i686-aros/sys-include" In file included from /usr/local/amiga/i686-aros/sys-include/rexx/storage.h:19, from /usr/local/amiga/i686-aros/sys-include/clib/alib_protos.h:46, from /usr/local/amiga/i686-aros/sys-include/proto/alib.h:13, from main.cpp:14: /usr/local/amiga/i686-aros/sys-include/dos/dosextens.h:436: error: member ' DosList::<anonymous union>::<anonymous struct> DosList::<anonymous union>::dol_volume' with constructor not allowed in union In file included from /usr/local/amiga/i686-aros/sys-include/proto/alib.h:13, from main.cpp:14: /usr/local/amiga/i686-aros/sys-include/clib/intuition_protos.h:136: error: previous declaration of 'IPTR CallHookA(Hook*, void*, void*)' with C++ linkage /usr/local/amiga/i686-aros/sys-include/clib/alib_protos.h:59: error: conflicts with new declaration with C linkage /usr/local/amiga/i686-aros/sys-include/clib/intuition_protos.h:137: error: previous declaration of 'IPTR CallHook(Hook*, void*, ...)' with C++ linkage /usr/local/amiga/i686-aros/sys-include/clib/alib_protos.h:60: error: conflicts with new declaration with C linkage make.exe: *** [main.o] Error 1 Execution terminated Muss ich da vielleicht irgendein #define setzen, wenn ich mit c++ programmiere ? -- http://amidevcpp.amiga-world.de/ [ - Answer - Quote - Direct link - ] |
2006-03-23, 00:56 h DariusBrewka Posts: 899 [Banned user] |
Das selbe will ich gerade auch machen, leider scheint das Alles nicht so einfach zu gehen, bzw. insbesondere gibt's fast immer Probleme mit IPTR, da konnte ich nur einen Ausweg finden indem ich die Includes mittels #ifdef abgeändert habe, die Speziell für den C++ Fall gültig sind. Meistens muss man IPTR durch APTR ersetzen dann ging das, z.B. bei dol_volume in dos/dosextens.h, warum mit IPTR der Fehler auftritt kann ich mir nicht erklären. ansonsten solltest du ggf. noch -fpermissive als compileroption hinzufügen. Da IPTR ehe nur bei 64 Bit Adressen gültig ist und AROS wie auf aros-exec (habe das dort auch angesprochen) ehe nicht 64BIT safe ist, ist es nicht wirklich ein Problem IPTR durch APTR zu ersetzen. Das mirt dem CallHook(), das kommt bei mir allerdings nicht, aber ich habe wohl andere C++ Schwierigkeiten, da kann er z.B. die MUI_NewObject(), MUI_Request() und MUI_MakeObject() Funktionen nicht finden (bei C++), obwohl ich -lmui benutze, wenn ich MUIMASTER_YES_INLINE_STDARG definiere, dann kann ich die MUI Makros nicht nutzen, ferner sagt er irgendwas von irgendwelchen pthread_xyz Funktionen die er nicht finden kann, weiß aber garnicht wozu die da sind . Bzw. kann man die irgendwie abschalten?, die brauche ich nicht. [ - Answer - Quote - Direct link - ] |
2006-03-23, 19:52 h Kaesebroetchen Posts: 643 User |
@DariusBrewka: Mit hilfe deiner Tips in der email (IPTR <-> APTR und extern"C") konnte ich das Testprogramm mit #include <alib_protos.h> kompilieren. Jetzt habe ich mal versucht was mit ZUNE (mui) zu machen und bekomme ich bei diesem code: C++ code:#include <cstdlib> #include <iostream> #include <exec/types.h> #include <libraries/mui.h> #include <proto/exec.h> #include <proto/intuition.h> #include <proto/muimaster.h> #include <clib/alib_protos.h> #include "cnc.h" /* int main() { CNC cnc1; return 10; } */ int main(void) { Object *wnd, *app, *but; // GUI creation app = ApplicationObject, SubWindow, wnd = WindowObject, MUIA_Window_Title, "AROS CNC", WindowContents, VGroup, Child, TextObject, MUIA_Text_Contents, "33cHello world!nHow are you?", End, Child, but = SimpleButton("_Ok"), End, End, End; if (app != NULL) { ULONG sigs = 0; // Click Close gadget or hit Escape to quit DoMethod(wnd, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, (IPTR)app, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit); // Click the button to quit DoMethod(but, MUIM_Notify, MUIA_Pressed, FALSE, (IPTR)app, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit); // Open the window set(wnd, MUIA_Window_Open, TRUE); // Check that the window opened if (XGET(wnd, MUIA_Window_Open)) { // Main loop while((LONG)DoMethod(app, MUIM_Application_NewInput, (IPTR)&sigs) != MUIV_Application_ReturnID_Quit) { if (sigs) { sigs = Wait(sigs | SIGBREAKF_CTRL_C); if (sigs & SIGBREAKF_CTRL_C) break; } } } // Destroy our application and all its objects MUI_DisposeObject(app); } return 0; } bekomme ich folgende Fehler: code:Compiler: i686-aros Building Makefile: "C:CrossCompilerAmiDevCppAROS_CNCMakefile.win" Executing make clean rm -f main.o cnc.o serial.o Aros_CNC.exe i686-aros-g++.exe -c main.cpp -o main.o -I"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/lib/gcc-lib/i686-aros/3.3.1" -I"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/i686-aros/sys-include" main.cpp: In function 'int main()': main.cpp:49: warning: cannot pass objects of non-POD type 'class IPTR' through '...'; call will abort at runtime main.cpp:61: error: non-lvalue in unary '&' main.cpp:66: error: non-lvalue in unary '&' main.cpp:72: error: non-lvalue in unary '&' main.cpp:72: error: could not convert '({...})' to 'bool' main.cpp:75: error: non-lvalue in unary '&' main.cpp:76: error: non-lvalue in unary '&' main.cpp:76: error: 'class IPTR' used where a 'LONG' was expected make.exe: *** [main.o] Error 1 Execution terminated Hast ja oben schon geschrieben, daß Zune Probleme macht. -- http://amidevcpp.amiga-world.de/ [ - Answer - Quote - Direct link - ] |
2006-03-23, 21:41 h Georg Posts: 107 User |
Ich bin kein C++ Coder, aber versucht mal exec/types.h zu editieren. Darin sind die typedefs für IPTR, SIPTR und STACKIPTR innerhalb eines "#if !defined(__cplusplus)" Blockes. Ich würde das mal probeweise umändern in "#if 1". [ - Answer - Quote - Direct link - ] |
2006-03-24, 02:24 h DariusBrewka Posts: 899 [Banned user] |
Zitat: Ich habe es zwar geschafft das obige Programm zu übersetzen, aber leider nicht indem ich einfach nur types.h geändert habe. Es ist unter C++ immer irgendwie ein Konflikt wenn IPTR benutzt wird. Und ich muss boobsistubs.h nutzen. Leider geht bei mir das Linken nicht, da kommen undefinierte Symbole code:U dl_iterate_phdr U _GLOBAL_OFFSET_TABLE_ w pthread_create w pthread_getspecific w pthread_key_create w pthread_mutex_lock w pthread_mutex_unlock w pthread_once w pthread_setspecific U MUI_Request(void*, void*, long, char*, char*, char*, void U MUI_MakeObject(long, ...) U MUI_AllocAslRequestTags(unsigned long, unsigned long, ...) die MUI_xyz()s, da weiß ich nicht warum das überhaupt kommt, denn ich rufe g++ mit -lmui auf, die Restlichen Symbole werden wohl daran liegen das AROS Hosted den Linux Compiler nutzt und ich statt gcc g++ nutze und da wohl die restlichen Funktionen gelinkt werden. Aber wie kann ich das abschalten? [ - Answer - Quote - Direct link - ] |
2006-03-24, 09:26 h Solar Posts: 3680 User |
Ich hab zwar von MUI / AOS API keinen Plan, aber vielleicht...Zitat: Versuchsweise mal mit G++ -c nur bis zum Objektcode linken lassen, und mit objdump die Symboltabellen des Objektcodes und von libmui ausgeben lassen. Eventuell sucht G++ nach "mangled names", weil die Funktionen nicht als extern "C" deklariert wurden o.ä. Zitat: pthread wird nicht automatisch durch den G++ angezogen; da hätte ich eher einen der Includes in Verdacht. Zitat: Erst, wenn Du raushast, woran es genau liegt. [ Dieser Beitrag wurde von Solar am 24.03.2006 um 09:27 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2006-03-24, 16:12 h Holger Posts: 8116 User |
Zitat:Das sind interessanterweise genau die varargs-Funktionen. Ich weiß nicht, wie AROS das handhabt, aber die 68k-includes pflegten genau damit *sehr häßliche* Dinge zu tun, die sowohl wegen C++, als auch dem anderen Prozessor ziemlich problematisch sein können. Ich nehme mal an, daß in der Linkbibliothek nur die xyzA() Funktionen sind. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2006-03-26, 21:02 h Kaesebroetchen Posts: 643 User |
Zitat: Danke ! Das war der entscheidende Hinweis. Danach bekam ich zwar immer noch diverse Fehlermeldungen und Warnungen, aber die konnte ich durch casten alle beseitigen. (die (long unsigned int) casts) C++ code:#include <cstdlib> #include <iostream> #ifdef __AROS__ #include <clib/boopsistubs.h> #endif #include <exec/types.h> #include <libraries/mui.h> #include <proto/exec.h> #include <proto/intuition.h> #include <proto/muimaster.h> #include "cnc.h" int main(void) { Object *wnd, *app, *but; CNC cnc1; // GUI creation app = ApplicationObject, SubWindow, wnd = WindowObject, MUIA_Window_Title, "AROS CNC", WindowContents, VGroup, Child, TextObject, MUIA_Text_Contents, "33cHello world!nHow are you?", End, Child, but = SimpleButton("_Ok"), End, End, End; if (app != NULL) { ULONG sigs = 0; // Click Close gadget or hit Escape to quit DoMethod(wnd, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, (IPTR)app, 2, MUIM_Application_ReturnID, (long unsigned int)MUIV_Application_ReturnID_Quit); // Click the button to quit DoMethod(but, MUIM_Notify, MUIA_Pressed, FALSE, (IPTR)app, 2, MUIM_Application_ReturnID, (long unsigned int)MUIV_Application_ReturnID_Quit); // Open the window set(wnd, MUIA_Window_Open, TRUE); // Check that the window opened if (XGET(wnd, MUIA_Window_Open)) { // Main loop DoMethod(app, MUIM_Application_NewInput, (long unsigned int)&sigs); while(DoMethod(app, MUIM_Application_NewInput, (ULONG) sigs) != (long unsigned int)APTR(MUIV_Application_ReturnID_Quit)) { if (sigs) { sigs = Wait(sigs | SIGBREAKF_CTRL_C); if (sigs & SIGBREAKF_CTRL_C) break; } } } // Destroy our application and all its objects MUI_DisposeObject(app); } return 0; } Jetzt muss ich mich mit ZUNE/MUI beschäftigen. Kennt da vielleicht jemand ein paar gute Links, Tutorials ? -- http://amidevcpp.amiga-world.de/ [ - Answer - Quote - Direct link - ] |
2006-03-26, 21:58 h Kaesebroetchen Posts: 643 User |
Kann man mit ZUNE/MUI eigentlich Tabs machen ? Also über Registerkarten zwischen verschiedenen Seiten umschalten ? Falls ja, wie heißt das in MUI und wie mache ich das ? -- http://amidevcpp.amiga-world.de/ [ - Answer - Quote - Direct link - ] |
2006-03-26, 22:47 h Kaesebroetchen Posts: 643 User |
Ich habe ein bisschen Dokumentation zu MUI gefunden und das mit den Tabs hinbekommen. Werden aber sicher noch ein paar Fragen kommen... -- http://amidevcpp.amiga-world.de/ [ - Answer - Quote - Direct link - ] |
2006-03-28, 02:01 h DariusBrewka Posts: 899 [Banned user] |
Zitat: Danke, ich habe erstens einen anderen Compiler benutzt und dann die definitionen in clib/muimaster_protos.h als extern "C" deklariert, damit habe ich die ganzen link Probleme behoben. gruss [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > c++ Probleme clib/alib_protos.h | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |