Re: Compiling problem with gcc4.5 libgcc

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>  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

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux