building gcc 4.4.5 from source on Fedora 13

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

 



Apologies if this is the wrong mailing list, but I could not find a Fedora-specific one for gcc (as my problem seems to be specific to the Fedora build of gcc 4.4.5 - at least that is what I think anyway)!

The reason I'd like to build gcc from source is so that I could enable multilib allowing me to compile code for both i686 and x86_64 architectures (my machine is x86_64). The 'standard' Fedora distribution rpm does not allow me to do that - when I try "gcc -o hello -m32 hello.c" or "gcc -o hello -march=i686 hello.c" I get the following errors:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.4.5/libgcc_s.so when searching for -lgcc_s /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.4.5/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status

and

hello.c:1: error: CPU you selected does not support x86-64 instruction set

So I downloaded the source rpm and tried to build a binary rpm by running "rpmbuild -bb gcc.spec".

I've got a lot of errors and had to hack into this VERY POORLY designed file to disable the languages I do not need (gcc-java, fortran to name a few), but still no go!

I've passed (and fixed) the dreaded GCC No executable error, and then after all this (wasted about a day with this!) at my latest attempt after about an hour of compiling I've got this:

Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.oz4CGW
+ umask 022
+ cd /home/zeek/rpmbuild/BUILD
+ '[' /home/zeek/rpmbuild/BUILDROOT/gcc-4.4.5-2.fc13.x86_64 '!=' / ']'
+ rm -rf /home/zeek/rpmbuild/BUILDROOT/gcc-4.4.5-2.fc13.x86_64
++ dirname /home/zeek/rpmbuild/BUILDROOT/gcc-4.4.5-2.fc13.x86_64
+ mkdir -p /home/zeek/rpmbuild/BUILDROOT
+ mkdir /home/zeek/rpmbuild/BUILDROOT/gcc-4.4.5-2.fc13.x86_64
+ cd gcc-4.4.5-20101113
+ LANG=C
+ export LANG
+ unset DISPLAY
+ rm -fr /home/zeek/rpmbuild/BUILDROOT/gcc-4.4.5-2.fc13.x86_64
+ cd obj-x86_64-redhat-linux
+ TARGET_PLATFORM=x86_64-redhat-linux
+ make -C x86_64-redhat-linux/libstdc++-v3
make: *** x86_64-redhat-linux/libstdc++-v3: No such file or directory. Stop.
error: Bad exit status from /var/tmp/rpm-tmp.oz4CGW (%install)


Close examination of the gcc.spec file reveals that the last 3 statements above (marked with '+') are executed from the gcc.spec file and they refer to an environment variable called gcc_target_platform, which is set at the very top of gcc.spec for my host architecture (x86_64) to the (presumably internal) value of __target_platform. Its value is "x86_64-redhat-linux" as evident from the above 3 statements, but the actual directory name is "x86_64-unknown-linux-gnu" in reality and that is why this fails.

I then tried to force the issue and set the --host and --build targets of ./configure to "x86_64-redhat-linux", but it then ./configure assumes the taget directory to be "x86_64-redhat-linux-gnu", which again fails at the above point simply because there is no subdirectory named "x86_64-redhat-linux" in the "obj-x86_64-redhat-linux" directory either!

I do not wish to change the value of either the gcc_target_platform or __target_platform variables because they are later used to install the 32-bit libraries under the 64 architecture and create the symlinks, which are used with ld and gcc itself so I am not certain that gcc/ld will work after that.

Any idea how can I get out of this mess?


[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