home *** CD-ROM | disk | FTP | other *** search
- known problems and FAQs:
- -----------------------
-
-
- - GCC produces very inefficient code: use -O or -O2 option (optimize)
-
-
- - template.h: replace 'template' in typedef struct ... template through e.g. 'template_t';
- don't forget to change it all over the file
-
-
- - you get an extensive list of undefined external(s) with C++? Use '-+' option with mulink.
-
-
- - the same as above but with AOF style compiling (-+ option not available for AOF):
- use the extern "C" feature with your standard C header files. For instance:
-
- extern "C" {
- #include "stdlib.h"
- #include "stdio.h"
- }
-
- this will tell the compiler that all the functions prototyped in the included libraries
- are C-style functions not C++ functions. You can use this feature with assembler
- functions too.
-
-
- - you still get an extensive list of undefined external(s)? Are you sure you are linking
- your obj with the MUPROS version of all other objs? Remember that mulink does link objects
- it finds in the files you mention. If there are no valid objects in a file mulink sometimes
- does not complain.
-
-
- - you get the message 'undefined external(s): __divsi3, __udivsi3, __modsi3, __umodsi3'? You
- are using stubs without the GNU C/C++ extension. Look for the file o.div-fast in the risclib
- directory and append it to stubsmu or run makelibs (rebuilds stubsmu and oslib_mu).
- if you are using AOF you have to link the libary clib:o.gccext with your application.
-
-
- - you have no gccext library: run (amu) the makeAOF file in the risclib directory.
-
-
- - your application does not startup at all? You have probably converted your AOF stubs to
- MUPROS stubs (aofconvert) without applying option -O. If you do so, MULINK will not link
- some unreferenced areas (e.g. RTSK). But those areas are absolutely necessary.
-
-
- - any messages as '...!scrap.scrapdir.x0287400s: 76: error: bla bla bla'? Some incompatibility
- between compiler and assembler occured. Contact me (see below).
-
-
- - the same but in floating point context: remember that floating point arithmetic is not
- supported at the moment. Contact me to get the latest version (or check your other software
- sources).
-
-
- - just don't read the linker message 'undefined external(s): __root_stack_size, __RelocCode'.
- These symbols are weak external bindings in stubs. As MUPROS does not support weak bindings
- the linker will show the warning though the application will work correctly.
-
-
- - do skip the message 'double defined public variable(s): C$$Code' too.
-
-
- - your desktop application does not startup: link stubsmu before oslib_mu
-
-
- - GCC terminates fast but does not do anything obviously: increase your memory allocation
- either for 'next' or for the task gcc is started by
-
-
- - beware of redefining an initializer in a child class, e.g.:
- class a { a(); };
- class b: public a { a(); };
- sometimes this will cause GCC to hang.
-
-
- - You would like to use another library than Stubs or RISC_OSlib, e.g. UNIXLIB
- and Desklib (by the way: phantastic, those two libs!)? You can convert them
- as it is done by 'makelibs': use libfile (not supplied with GCC) to split
- the libaries into object files, then convert them with aofconvert and reappend
- them with fappend.
- With revision > B that problem is obsolete: you can use AOF/ALF files now.
-
-
- - Your application behaves strange / does not startup at all: have you linked with
- stubsmu and does your application use more than 4kBytes of local variables (stack)?
- Include the line
- int __root_stack_size = 16384;
- into one of your source files (adjust stack size; could be more or less than 16384
- too).
- GCC does not produce any stack checking code. So automatic stack extension can not
- be done and the stack must be as big as needed from the beginning.
-
-
- - you get a number of errors mentioning a conflict with built-in functions:
- change in your string.h header file the prototypes for memcmp, memcpy and strlen
- to
- extern int memcmp(const void * /*s1*/, const void * /*s2*/, long unsigned int /*n*/);
- extern void *memcpy(void * /*s1*/, const void * /*s2*/, long unsigned int /*n*/);
- extern long unsigned int strlen(const char * /*s*/);
-
-
- - you are not able to compile some templates: no solution yet.
-
-
- Thomas Aeby
- Graeffet 406
- 1735 Giffers
- Switzerland
- Tel. 037/38 16 00
- EMail: aeby@uropax.contrib.de
-