Build error in gmp 4.2.2
Michael J. Bauer
mjbauer at eecs.tufts.edu
Tue Mar 25 21:44:38 CET 2008
The pertinent info section was not an absolute order; it was merely
indicating the environment. I should have put the setenv before the
configure; that's how I ran the initial build.
The difference between what I did and the officially approved method of
setting ABI should make no operative difference in result from my prior
attempt; both my earlier setenv and the command-line assignment set the
environment variable ABI to 64 for configure and make. The only
difference is that my earlier method set ABI as a global environment
variable in tcsh; this way I feed it individually to each of the two
build commands (configure and make).
Note that the same error also happens with no ABI selected (which
implies 64) and C++ support turned on. However, there is no problem if
I leave C++ support disabled, no matter what method I use to set the ABI
on configuration.
Having just rebuilt with what appears to be the officially approved
means of setting ABI:
# ./configure --prefix=/usr/local/package2
--oldincludedir=/usr/local/package2/include --enable-cxx ABI=64
(This time around, ABI is not set as a global environment variable in
tcsh; it's just fed to configure and later to make. )
As expected, I still get the identical error on make:
# make ABI=64
...lots removed...
/bin/bash ./libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I.
-D__GMP_WITHIN_GMP -g -O2 -c -o dummy.lo `test -f 'cxx/dummy.cc' ||
echo './'`cxx/dummy.cc
g++ -DHAVE_CONFIG_H -I. -I. -I. -D__GMP_WITHIN_GMP -g -O2 -c
cxx/dummy.cc -fPIC -DPIC -o .libs/dummy.o
g++ -DHAVE_CONFIG_H -I. -I. -I. -D__GMP_WITHIN_GMP -g -O2 -c
cxx/dummy.cc -o dummy.o >/dev/null 2>&1
/bin/bash ./libtool --mode=link g++ -g -O2 -o libgmpxx.la -rpath
/usr/local/package2/lib -Wc,-m64 -version-info 4:2:0 dummy.lo
cxx/isfuns.lo cxx/ismpf.lo cxx/ismpq.lo cxx/ismpz.lo cxx/ismpznw.lo
cxx/osdoprnti.lo cxx/osfuns.lo cxx/osmpf.lo cxx/osmpq.lo cxx/osmpz.lo
libgmp.la
g++ -shared -nostdlib
/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/sparcv9/crti.o
/usr/ccs/lib/sparcv9/values-Xa.o
/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/sparcv9/crtbegin.o
.libs/dummy.o cxx/.libs/isfuns.o cxx/.libs/ismpf.o cxx/.libs/ismpq.o
cxx/.libs/ismpz.o cxx/.libs/ismpznw.o cxx/.libs/osdoprnti.o
cxx/.libs/osfuns.o cxx/.libs/osmpf.o cxx/.libs/osmpq.o
cxx/.libs/osmpz.o -Wl,-R -Wl,/tmp/Software/gmp-4.2.2/.libs -Wl,-R
-Wl,/usr/local/lib/sparcv9 -Wl,-R -Wl,/usr/local/package2/lib -Wl,-R
-Wl,/usr/local/lib/sparcv9 -Wl,-R -Wl,/usr/local/lib -Wl,-R
-Wl,/usr/local/ssl/lib -Wl,-R -Wl,/usr/openwin/lib ./.libs/libgmp.so
-L/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/sparcv9
-L/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6
-L/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/../../../../sparc-sun-solaris2.10/lib
-L/usr/ccs/bin/sparcv9 -L/usr/ccs/bin -L/usr/ccs/lib/sparcv9
-L/usr/ccs/lib
-L/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/../../../sparcv9
-L/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/../../.. -L/lib/sparcv9
-L/usr/lib/sparcv9 /usr/local/lib/sparcv9/libstdc++.so
-L/sol10/SOURCES/S10/gcc-3.4.6/objdir/sparc-sun-solaris2.10/sparcv9/libstdc++-v3/src
-L/sol10/SOURCES/S10/gcc-3.4.6/objdir/sparc-sun-solaris2.10/sparcv9/libstdc++-v3/src/.libs
-L/usr/local/lib -L/usr/local/ssl/lib -L/usr/openwin/lib
-L/sol10/SOURCES/S10/gcc-3.4.6/objdir/gcc/sparcv9
-L/sol10/SOURCES/S10/gcc-3.4.6/objdir/gcc -L/usr/local/lib/sparcv9 -lm
-lgcc_s_sparcv9
/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/sparcv9/crtend.o
/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/sparcv9/crtn.o -m64
-Wl,-h -Wl,libgmpxx.so.4 -o .libs/libgmpxx.so.4.0.2
ld: fatal: file .libs/dummy.o: wrong ELF class: ELFCLASS32
ld: fatal: File processing errors. No output written to
.libs/libgmpxx.so.4.0.2
collect2: ld returned 1 exit status
For comparison, here's an earlier stretch in the non-C++ section:
gcc -DHAVE_CONFIG_H -I. -I. -I.. -D__GMP_WITHIN_GMP -I.. -O2 -m64
-mptr64 -mcpu=ultrasparc -c vsscanf.c -o vsscanf.o >/dev/null 2>&1
/bin/bash ../libtool --mode=link gcc -O2 -m64 -mptr64
-mcpu=ultrasparc -o libscanf.la doscan.lo fscanf.lo fscanffuns.lo
scanf.lo sscanf.lo sscanffuns.lo vfscanf.lo vscanf.lo vsscanf.lo
ar cq .libs/libscanf.a .libs/doscan.o .libs/fscanf.o .libs/fscanffuns.o
.libs/scanf.o .libs/sscanf.o .libs/sscanffuns.o .libs/vfscanf.o
.libs/vscanf.o .libs/vsscanf.o
ranlib .libs/libscanf.a
creating libscanf.la
The state of the build tree after the errors is instructive:
# pwd
/tmp/Software/gmp-4.2.2
# file memory.o
memory.o: ELF 64-bit MSB relocatable SPARCV9 Version 1,
UltraSPARC1 Extensions Required
(This is a representative; every .o file in this directory, save one, is
ELF 64.)
# file dummy.o
dummy.o: ELF 32-bit MSB relocatable SPARC Version 1
(This is the one.)
# cd cxx
# file osfuns.o
osfuns.o: ELF 32-bit MSB relocatable SPARC Version 1
(This is a representative; all of the .o files in this directory are ELF
32.)
MJB
Torbjorn Granlund wrote:
> "Michael J. Bauer" <mjbauer at eecs.tufts.edu> writes:
>
> I am attempting to build gmp 4.2.2 from source on a Sunfire V120 running
> Solaris 10. I am finding a build error with a 64-bit build and C++
> support enabled. I am using gcc and the stock Solaris build tools
> (make, ld, ar, ranlib, and so on)
>
> Pertinent information:
>
> # gcc --version
> gcc (GCC) 3.4.6
> # ./configure --prefix=/usr/local/package2
> --oldincludedir=/usr/local/package2/include --enable-cxx
> (The error only happens with C++ support enabled. The peculiar location
> is so I can make a Solaris package; the real install will happen in
> /usr/local.)
> # setenv ABI 64
> (This error does not happen with ABI 32, but does happen with ABI unset.)
>
> Please see the manual on how to build GMP; you're not selectign ABI
> correctly.
>
>
More information about the gmp-bugs
mailing list