Compiling problem with gcc4.5 libgcc

mike mikereape@onetel.com
Sat May 8 07:22:00 GMT 2010


Hi,

First thanks to Ian for the link below.  I'm following up in this way in 
case it is of any use to anyone else.

On 05/05/2010 06:57 PM, Ian Lance Taylor wrote:
> mike<mikereape@onetel.com>  writes:
>
>    
>>> checking for
>>> i686-pc-linux-gnu-gcc... /home/mike/gcc-obj-dir/./gcc/xgcc
>>> -B/home/mike/gcc-obj-dir/./gcc/ -B/usr/local/i686-pc-linux-gnu/bin/
>>> -B/usr/local/i686-pc-linux-gnu/lib/ -isystem
>>> /usr/local/i686-pc-linux-gnu/include -isystem
>>> /usr/local/i686-pc-linux-gnu/sys-include
>>> checking for suffix of object files... configure: error: in
>>> /home/mike/gcc-obj-dir/i686-pc-linux-gnu/libgcc':
>>> configure: error: cannot compute suffix of object files: cannot compile
>>> See `config.log' for more details.
>>> make[2]: *** [configure-stage1-target-libgcc] Error 1
>>> make[2]: Leaving directory `/home/mike/gcc-obj-dir'
>>> make[1]: *** [stage1-bubble] Error 2
>>> make[1]: Leaving directory `/home/mike/gcc-obj-dir'
>>> make: *** [all] Error 2
>>>        
> http://gcc.gnu.org/wiki/FAQ#Configuration_fails_with_.27.27configure:_error:_cannot_compute_suffix_of_object_files:_cannot_compile.27.27._What_is_the_problem.3F
>
> Ian
>
>    
After consulting the link I did "make distclean" on the gmp, mpc and 
mfrc installs that I pre-installed before trying to build gcc.  I moved 
the relevant directories under the top-level gcc source directory.  On 
the basis of the link I checked out config.log and found that I was 
missing libelf (the source directory not libelf.h) so I installed 
libelf-0.8.9.  Crucially the libelf directory ended up in 
/usr/local/include and not /usr/local.  All it contains is the following:

>   -rw-r--r--. 1 root root 24540 2010-05-06 21:06 elf_repl.h
>   -rw-r--r--. 1 root root  5046 2010-05-06 21:06 gelf.h
>   -rw-r--r--. 1 root root  8133 2010-05-06 21:06 libelf.h
>   -rw-r--r--. 1 root root  1447 2010-05-06 21:06 nlist.h
>   -rw-r--r--. 1 root root  3888 2010-05-06 21:06 sys_elf.h

I then did configure and make again and it finished with:

> lto/lto-elf.o: In function `lto_elf_file_open':
> lto-elf.c:(.text+0xcb5): undefined reference to `elf_getshdrstrndx'
> collect2: ld returned 1 exit status
> make[3]: *** [lto1] Error 1
> make[3]: Leaving directory 
> `/home/mike/LLJVM/gcc/gcc-4.5.0/gcc-4.5.0/host-i686-pc-linux-gnu/gcc'
> make[2]: *** [all-stage2-gcc] Error 2
> make[2]: Leaving directory `/home/mike/LLJVM/gcc/gcc-4.5.0/gcc-4.5.0'
> make[1]: *** [stage2-bubble] Error 2
> make[1]: Leaving directory `/home/mike/LLJVM/gcc/gcc-4.5.0/gcc-4.5.0'
> make: *** [all] Error 2
so I guess it blew up in the linker.  Stupidly I didn't check config.log 
after I did the configure.  Of course the object directory (gcc-obj-dir 
in my case) was empty so I couldn't look at the config.log file to find 
out what was wrong.

A little googling led me to the following thread:  
http://gcc.gnu.org/ml/gcc/2010-03/msg00126.html, 
http://gcc.gnu.org/ml/gcc/2010-03/msg00127.html and 
http://gcc.gnu.org/ml/gcc/2010-03/msg00128.html which discusses using 
elfutils-libelf 0.145 the relevance being the difference between 
elf_getshstrndx and elf_getshdrstrndx the difference being that there is 
an extra "d" in the latter.  So then I installed 
elfutils-libelf-0.145-1.fc11.i586.rpm and this is what I got:

> [root@desktop gcc-obj-dir]# rpm -ivv 
> ~mike/LLJVM/elfutils-libelf-0.145-1.fc11.i586.rpm
> D: ============== /home/mike/LLJVM/elfutils-libelf-0.145-1.fc11.i586.rpm
> D: Expected size:        66562 = lead(96)+sigs(1284)+pad(4)+data(65178)
> D:   Actual size:        66562
> D: loading keyring from pubkeys in /var/lib/rpm/pubkeys/*.key
> D: couldn't find any keys in /var/lib/rpm/pubkeys/*.key
> D: loading keyring from rpmdb
> D: opening  db environment /var/lib/rpm/Packages cdb:mpool:joinenv
> D: opening  db index       /var/lib/rpm/Packages rdonly mode=0x0
> D: locked   db index       /var/lib/rpm/Packages
> D: opening  db index       /var/lib/rpm/Name rdonly mode=0x0
> D:  read h#    1431 Header sanity check: OK
> D: added key gpg-pubkey-d22e77f2-49750871 to keyring
> D:  read h#    1798 Header sanity check: OK
> D: added key gpg-pubkey-7fac5991-4615767f to keyring
> D: Using legacy gpg-pubkey(s) from rpmdb
> D: /home/mike/LLJVM/elfutils-libelf-0.145-1.fc11.i586.rpm: Header V3 
> RSA/SHA256 signature: OK, key ID d22e77f2
> D: ========== relocations
> D:     added binary package [0]
> D: found 0 source and 1 binary packages
> D: ========== +++ elfutils-libelf-0.145-1.fc11 i586/linux 0x1
> D: opening  db index       /var/lib/rpm/Depends create mode=0x0
> D: opening  db index       /var/lib/rpm/Basenames rdonly mode=0x0
> D:  read h#     708 Header V3 RSA/SHA256 signature: OK, key ID d22e77f2
> D:  Requires: /sbin/ldconfig                                YES (db files)
> D:  Requires: /sbin/ldconfig                                YES (cached)
> D: opening  db index       /var/lib/rpm/Providename rdonly mode=0x0
> D:  Requires: ld-linux.so.2                                 YES (db 
> provides)
> D:  Requires: ld-linux.so.2(GLIBC_2.3)                      YES (db 
> provides)
> D:  Requires: libc.so.6                                     YES (db 
> provides)
> D:  Requires: libc.so.6(GLIBC_2.0)                          YES (db 
> provides)
> D:  Requires: libc.so.6(GLIBC_2.1)                          YES (db 
> provides)
> D:  Requires: libc.so.6(GLIBC_2.1.3)                        YES (db 
> provides)
> D:  Requires: libc.so.6(GLIBC_2.2)                          YES (db 
> provides)
> D:  Requires: libc.so.6(GLIBC_2.3)                          YES (db 
> provides)
> D:  Requires: libc.so.6(GLIBC_2.4)                          YES (db 
> provides)
> D:  Requires: libelf.so.1                                   YES (added 
> provide)
> D:  Requires: rpmlib(CompressedFileNames) <= 3.0.4-1        YES 
> (rpmlib provides)
> D:  Requires: rpmlib(FileDigests) <= 4.6.0-1                YES 
> (rpmlib provides)
> D:  Requires: rpmlib(PayloadFilesHavePrefix) <= 4.0-1       YES 
> (rpmlib provides)
> D:  Requires: rpmlib(VersionedDependencies) <= 3.0.3-1      YES 
> (rpmlib provides)
> D:  Requires: rtld(GNU_HASH)                                YES (db 
> provides)
> D: opening  db index       /var/lib/rpm/Conflictname rdonly mode=0x0
> D: closed   db index       /var/lib/rpm/Depends
> D: ========== recording tsort relations
> D:  Requires: libelf.so.1                                   YES (added 
> provide)
> D: ========== tsorting packages (order, #predecessors, #succesors, 
> tree, depth, breadth)
> D:     0    0    0    0    1    0   +elfutils-libelf-0.145-1.fc11.i586
> D: installing binary packages
> D: closed   db index       /var/lib/rpm/Conflictname
> D: closed   db index       /var/lib/rpm/Providename
> D: closed   db index       /var/lib/rpm/Basenames
> D: closed   db index       /var/lib/rpm/Name
> D: closed   db index       /var/lib/rpm/Packages
> D: closed   db environment /var/lib/rpm/Packages
> D: opening  db environment /var/lib/rpm/Packages cdb:mpool:joinenv
> D: opening  db index       /var/lib/rpm/Packages create mode=0x42
> D: mounted filesystems:
> D:     i        dev    bsize       bavail       iavail mount point
> D:     0 0x0000fd00     4096     49350090     14305164 /
> D:     1 0x00000003     4096            0           -1 /proc
> D:     2 0x00000000     4096            0           -1 /sys
> D:     3 0x0000000a     4096            0           -1 /dev/pts
> D:     4 0x00000802     1024       157064        51156 /boot
> D:     5 0x00000010     4096       419374       214535 /dev/shm
> D:     6 0x00000011     4096            0           -1 
> /proc/sys/fs/binfmt_misc
> D:     7 0x00000012     4096            0           -1 
> /var/lib/nfs/rpc_pipefs
> D: sanity checking 1 elements
> D: opening  db index       /var/lib/rpm/Name create mode=0x42
> D:  read h#    1814 Header V3 RSA/SHA256 signature: OK, key ID d22e77f2
> D: computing 2 file fingerprints
> Preparing packages for installation...
> D: computing file dispositions
> D: opening  db index       /var/lib/rpm/Basenames create mode=0x42
>     package elfutils-libelf-0.145-1.fc11.i586 is already installed
> D: closed   db index       /var/lib/rpm/Basenames
> D: closed   db index       /var/lib/rpm/Name
> D: closed   db index       /var/lib/rpm/Packages
> D: closed   db environment /var/lib/rpm/Packages
> [root@desktop gcc-obj-dir]#
You can see that rpm claimed that elfutils-libelf-0.145-1.fc11.i586.rpm 
was already installed.  A look at the source package 
elfutils-0.145-1.fc11.src.rpm shows loads of files in the libelf 
directory including gelf_xlatetom.c but a find on /usr revealed only:

> [root@desktop LLJVM]# find /usr -name libelf -print
> /usr/local/include/libelf
> /usr/include/xulrunner-sdk-1.9.1/system_wrappers_js/libelf
> /usr/include/xulrunner-sdk-1.9.1/system_wrappers/libelf
> [root@desktop LLJVM]#

and a find on gelf_xlatetom.c revealed nothing:

> [root@desktop SOURCES]# find /usr -name gelf_xlatetom.c -print
> [root@desktop SOURCES]# 
so I need to install the source package right but when I do something 
like rpm -ivv <package-name> everything just ends up in one of the 
/root/rpmbuild subdirectories and not where it's supposed to go.  If I 
need to install the source rpm can someone please tell me how to do it.  
(I've never installed a source rpm before and the rpm manpage is not 
helpful here.)

Being essentially stuck I decided to make another clean copy of the gcc 
source dir and run config again from gcc-obj-dir.  This showed two errors:

> conftest.c:10:19: error: ppl_c.h: No such file or directory
> conftest.c: In function 'main':
> conftest.c:16: error: 'choke' undeclared (first use in this function)
> conftest.c:16: error: (Each undeclared identifier is reported only once
> conftest.c:16: error: for each function it appears in.)
> conftest.c:16: error: expected ';' before 'me'
> configure:5858: $? = 1
> configure: failed program was:
> | /* confdefs.h */
> | #define PACKAGE_NAME ""
> | #define PACKAGE_TARNAME ""
> | #define PACKAGE_VERSION ""
> | #define PACKAGE_STRING ""
> | #define PACKAGE_BUGREPORT ""
> | #define PACKAGE_URL ""
> | #define LT_OBJDIR ".libs/"
> | /* end confdefs.h.  */
> | #include "ppl_c.h"
> | int
> | main ()
> | {
> |
> |   #if PPL_VERSION_MAJOR != 0 || PPL_VERSION_MINOR != 10
> |   choke me
> |   #endif
> |
> |   ;
> |   return 0;
> | }
> configure:5862: result: no
> configure:6092: checking how to run the C preprocessor
> configure:6123: gcc -E  -I/usr/include/libelf conftest.c
> configure:6123: $? = 0
> configure:6137: gcc -E  -I/usr/include/libelf conftest.c
> conftest.c:10:28: error: ac_nonexistent.h: No such file or directory
> configure:6137: $? = 1
> configure: failed program was:
> | /* confdefs.h */
> | #define PACKAGE_NAME ""
> | #define PACKAGE_TARNAME ""
> | #define PACKAGE_VERSION ""
> | #define PACKAGE_STRING ""
> | #define PACKAGE_BUGREPORT ""
> | #define PACKAGE_URL ""
> | #define LT_OBJDIR ".libs/"
> | /* end confdefs.h.  */
> | #include <ac_nonexistent.h>
> configure:6162: result: gcc -E
> configure:6182: gcc -E  -I/usr/include/libelf conftest.c
> configure:6182: $? = 0
> configure:6196: gcc -E  -I/usr/include/libelf conftest.c
> conftest.c:10:28: error: ac_nonexistent.h: No such file or directory
> configure:6196: $? = 1
> configure: failed program was:
> | /* confdefs.h */
> | #define PACKAGE_NAME ""
> | #define PACKAGE_TARNAME ""
> | #define PACKAGE_VERSION ""
> | #define PACKAGE_STRING ""
> | #define PACKAGE_BUGREPORT ""
> | #define PACKAGE_URL ""
> | #define LT_OBJDIR ".libs/"
> | /* end confdefs.h.  */
> | #include <ac_nonexistent.h>
A further look at config.log showed:

> pplinc=''
> ppllibs=''

so I decided I was missing ppllib.  So then stupidly I installed 
ppl-0.10.2-2.fc11.i586.rpm and got this when I did the rpm command:

>     package ppl-0.10.2-7.fc11.i586 (which is newer than 
> ppl-0.10.2-2.fc11.i586) is already installed
>     file /usr/bin/ppl-config from install of ppl-0.10.2-2.fc11.i586 
> conflicts with file from package ppl-0.10.2-7.fc11.i586
>     file /usr/lib/libppl.so.7.1.0 from install of 
> ppl-0.10.2-2.fc11.i586 conflicts with file from package 
> ppl-0.10.2-7.fc11.i586
>     file /usr/lib/libppl_c.so.2.1.0 from install of 
> ppl-0.10.2-2.fc11.i586 conflicts with file from package 
> ppl-0.10.2-7.fc11.i586
so I have to install the source rpm again right?

I still have no idea what the ac_nonexistent.h file is or whether the 
source for libelf (from elfutils-libelf) and ppllib should be installed 
under the top-level ggc source directory.

I'd be really grateful for any help.  I hope I haven't forgot anything.

One last thing.  Can someone point me to a document that documents how 
the gcc build process works/is structured in some detail?

Cheers,
Mike



More information about the Gcc-help mailing list