[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: CRIS linking problems
Thanks for your help, now the sources compile and link. I made the
following changes to Makefile:
CFLAGS += -nostdinc -I$(prefix)/include/uC-libc -x c++
LDFLAGS += -nostdlib -L$(prefix)/lib
LDLIBS = -lgcc -lucc -lic
BTW, there isn't a single call to new or delete in our sources either,
which, as you suggested, could be the reason for this free problem.
Any C++ standard libraries are not used either.
Timo Sakari, email: Timo.Sakari@xxxxxxx.fi
"#define QUESTION ((bb) || !(bb))" - Shakespeare
> -----Original Message-----
> From: Hans-Peter Nilsson [mailto:firstname.lastname@example.org]
> Sent: 29. tammikuuta 2001 21:32
> To: Timo.Sakari@xxxxxxx.fi
> Cc: email@example.com
> Subject: Re: CRIS linking problems
> > From: Timo.SakariÉelektrobit.fi
> > Date: Mon, 29 Jan 2001 16:12:10 +0200
> > However, "-x c++" has no effect when placed in
> Rules.elinux. Instead, it has
> > to be placed to Makefile:
> > # CFLAGS += -nostdinc -I¤(prefix)/include/uC-libc #
> Original, doesn't
> > compile with C-files
> > CFLAGS += -nostdinc -I¤(prefix)/include/uC-libc -x c++ #
> Added -x c++
> > I am missing something here?
> (Sorry, I'll have to let someone else answer this one, someone
> with more up-to-date knowledge about the build framework.)
> > undefined reference to é_free'
> > make: *** ÄmainÅ Error 1
> > I assume the "-nostdlib" is here for memory saving purposes?
> No, it's purpose is to override the installed library. Other
> options, such as -l and -L are then used to specify another
> library, uclibc (which in turn is for memory-saving purposes).
> The GCC manual and info pages would tell you about -nostdlib.
> > However,
> > standard library function "free" seems to be located in
> stdlib, so I guess
> It is in libc.a actually, but I believe it is also in libucc.a.
> > stdlib is
> > also needed? On the other hand, in our sources codes, there
> isn't a single
> > call
> > to function free.
> This is key to the problem. As can be gleaned from the link
> errors, the default operator delete calls free. Operator delete
> is found in libgcc.a. The way the GNU linker (and other
> Unix-type linkers) works, it then searches for free in the
> *rest* of the libraries specified on the command line. Had your
> application actually used free, it would already be present.
> Since there are no more libraries on the command line, linking
> With -nostdlib, the system libraries are overridden. Without,
> system libraries are added *after* the libraries you specify to
> the compiler. For cris-dist-1.7, that would be the sequence
> "-lgcc -lc -lic -lgcc" (note the second "-lgcc" which is there
> for reasons similar to the above). So, free would be found in
> any file named libc.a on the paths specified by -L, or by
> default the installed library, glibc (or perhaps the default
> minimal libc.a if glibc isn't installed), while other functions
> are from uclibc. You don't want to mix libraries like that.
> > So, to get rid of this problem, I changed LDFLAGS to:
> > LDFLAGS += -L¤(prefix)/lib # removed -nostdlib
> > This removes the _free problem, but brings along other one:
> > /usr/local/cris/lib/gcc-lib/cris/2.7.2/rld-cris: cannot open
> > elinux/lib/crt0.o:
> > No such file or directory
> > make: *** ÄmainÅ Error 1
> By removing -stdlib, the tools now (as is normal) search for
> crt0.o as the start-up file, but for some reason it is not found
> on the specified paths. Perhaps because you don't have glibc
> installed. (It's less important, as the options are wrong
> > As far as I know, I have configured the environtment
> properly, I have set
> > ELINUX=1, executed
> > init_env, and managed to compile and run a simple Hello App in
> > Axis/Etrax100.
> > I am quite new to makefiles and ETrax/CRIS, so I am
> propably doing something
> > wrong here.
> > I have attached Makefile and Rules.elinux (original
> filenames changed).
> > Any suggestions?
> It seems "-lgcc" is misplaced, presumably also in
> devboard-1.0.2. Move it to be the first, alternatively add a
> *second* "-lucc" after it. Add back "-nostdlib" and other
> Since you want to compile C++, I suggest you consider upgrading
> the compiler tools.
> brgds, H-P