14

Problem when compiling gcc 4.6.2:

checking for avr-gcc... /data/data6/soft/src_build/gcc-4.6.2/host-x86_64-unknown-linux-gnu/gcc/xgcc -B/data/data6/soft/src_build/gcc-4.6.2/host-x86_64-unknown-linux-gnu/gcc/ -B/data/data6/soft/programming/gcc-avr/avr/bin/ -B/data/data6/soft/programming/gcc-avr/avr/lib/ -isystem /data/data6/soft/programming/gcc-avr/avr/include -isystem /data/data6/soft/programming/gcc-avr/avr/sys-include 
checking for suffix of object files... configure: error: in `/data/data6/soft/src_build/gcc-4.6.2/avr/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.

In my gcc-4.6.2/avr/libgcc/config.log I found:

configure:3268: /data/data6/soft/src_build/gcc-4.6.2/host-x86_64-unknown-linux-gnu/gcc/xgcc -B/data/data6/soft/src_build/gcc-4.6.2/host-x86_64-unknown-linux-gnu/gcc/ -B/data/data6/soft/programming/gcc-avr/avr/bin/ -B/data/data6/soft/programming/gcc-avr/avr/lib/ -isystem /data/data6/soft/programming/gcc-avr/avr/include -isystem /data/data6/soft/programming/gcc-avr/avr/sys-include -c -g -O2 conftest.c >&5
exec: 89: -o: not found
configure:3272: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "GNU C Runtime Library"
| #define PACKAGE_TARNAME "libgcc"
| #define PACKAGE_VERSION "1.0"
| #define PACKAGE_STRING "GNU C Runtime Library 1.0"
| #define PACKAGE_BUGREPORT ""
| /* end confdefs.h. */
| 
| int
| main ()
| {
| 
| ;
| return 0;
| }
configure:3286: error: in `/data/data6/soft/src_build/gcc-4.6.2/avr/libgcc':
configure:3289: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.

If this command run directly (after creating conftest.c) output will be same.

What is exec: 89: -o: not found? Which program write it? Where is 89 line?

Solutions like exporting LD_CONFIG_PATH or adding lines in /etc/ld.so.conf with path to GMP, MPFR, MPC not work for me.

Where find solution for this problem?

Update. It seems is configuration problem. Gcc has very good option -v :-) And i see that is assembler call from gcc, which fails. With option -save-temps i saved assembler source, and run assembler, but it doesnn't matter.

Instead of calling real assembler it calls shell-script wrapper, in my case /data/data6/soft/src_build/avr-gcc/gcc/as, which begins from:

ORIGINAL_AS_FOR_TARGET=""
ORIGINAL_LD_FOR_TARGET=""
ORIGINAL_PLUGIN_LD_FOR_TARGET=""
ORIGINAL_NM_FOR_TARGET=""

And when it form command-line call, we have this:

exec -o conftest.o conftest.s

which fails as described above.

Where is necessary fix this? To get call like this: exec as -o conftest.o conftest.s

Where good place to set variable ORIGINAL_AS_FOR_TARGET?

Alex T
  • 1,647
  • 4
  • 17
  • 25
  • What are your exact argument to `..../configure`? Did you pass a `CC` variable to it? Do you have a C compiler? Whch one? Which executable is it? Is it in your `PATH`? What is your host operating system? Are you sure you are building gcc outside of its source tree? What are your GCC source tree and build tree? Did you *carefully* read http://gcc.gnu.org/install/ ? – Basile Starynkevitch Feb 04 '12 at 14:41
  • Basile, thanks for reply. It is last ubuntu, build tree is OUTSIDE, compiler - gnu gcc 4.6.1 x86_64, target - avr. /data/data6/soft/src_build/avr-gcc - it is build tree, /data/data6/soft/src_build/gcc-4.6.2 - it is source tree. – Alex T Feb 04 '12 at 16:18
  • 1
    On Debian or Ubuntu: try first `aptitude build-dep gcc-avr binutils-avr; aptitude install gcc-avr binutils-avr` – Basile Starynkevitch Feb 04 '12 at 16:37
  • Okay, i will try soon, thanks again. – Alex T Feb 04 '12 at 16:42
  • I update post. May be it configuration problem? – Alex T Feb 04 '12 at 16:48
  • aptitude build-dep gcc-avr binutils-avr; aptitude install gcc-avr binutils-avr - it work. Where to find information about this dependences? – Alex T Feb 04 '12 at 17:40

2 Answers2

4

I had the same problem cross-compiling for mips.

Step one: Cross-compile the binutils for your target. Install them somewhere sane. I use /usr/local/[target]-gcc

Make sure you configure them with --program-prefix=[target]-

Something like (untested):

configure --prefix=/usr/local/avr-gcc --program-prefix=avr- --target=avr

Then you need to set up some environment variables so GCC can find them:

export AR_FOR_TARGET=/usr/local/avr-gcc/bin/avr-ar
export LD_FOR_TARGET=/usr/local/avr-gcc/bin/avr-ld
export OBJDUMP_FOR_TARGET=/usr/local/avr-gcc/bin/avr-objdump
export NM_FOR_TARGET=/usr/local/avr-gcc/bin/avr-nm
export RANLIB_FOR_TARGET=/usr/local/avr-gcc/bin/avr-ranlib
export READELF_FOR_TARGET=/usr/local/avr-gcc/bin/avr-readelf
export STRIP_FOR_TARGET=/usr/local/avr-gcc/bin/avr-strip
export AS_FOR_TARGET=/usr/local/avr-gcc/bin/avr-as

Now you can configure and compile GCC. Ensure you start from a completely empty build directory, otherwise gcc/as etc won't get recreated.

Majenko
  • 1,720
  • 14
  • 24
2

"*Building GCC is not trivial, but is not difficult if you follow the instructions carefully. Many people rush into trying to build it without reading the installation docs properly and make one or more of these common mistakes:

1) do not run ./configure from gcc src dir (this is not supported) => you need to run configure from outside the gcc source directory

2) Note: if GCC links dynamically to the prerequisite libs (GMP/MPFR/MPC) then the shared libraries must be in the dynamic linker's path (LD_LIBRARY_PATH), both when building gcc and when using the installed compiler.*"

Simple example (without dynamic link to GMP/MPFR/MPC):

tar xzf gcc-4.8.0.tar.gz
cd gcc-4.8.0
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-4.8.0/configure --prefix=/opt/gcc-4.8.0 
make
make install

Sources: Advogato Doc - GNU Doc

Axel Borja
  • 3,011
  • 6
  • 31
  • 43