why am i getting an elfclass64 error?
Al Kelley
blufox@ucsc.edu
Sun, 08 Jun 2003 00:42:08 -0700
i understand how to make gmp work, but only on a
win 2000 machine under cygwin where i use
it and like it very much.
however, on the following machine
SunOS unix1 5.8 Generic_108528-19 sun4u sparc SUNW,Ultra-80
i have failed to get gmp to work on all the versions of gcc
that i have tried:
gcc 2.95.3
gcc 3.2
gcc 3.3
when i install one of the above compilers,
i then reinstall gmp-4.1.2 starting with
./configure --enable-cxx --prefix=$gnu
all the installations work fine.
to test gmp, i compile the factorial
program that is found at the end
of this message. the program
compiles but fails to link
due to elfclass64 errors.
can anyone tell me what i am doing wrong?
here is what happens when i give
the command make [[i have put
in some ...'s to make it
more readable]]:
% make
g++ -Wall -I/.../gnu/include -c main.c
linking ...
ld: fatal: file .../gnu/lib/libgmpxx.so: wrong ELF class: ELFCLASS64
ld: fatal: file .../gnu/lib/libgmp.so: wrong ELF class: ELFCLASS64
ld: fatal: File processing errors. No output written to a.out
collect2: ld returned 1 exit status
make: *** [a.out] Error 1
can someone tell me what i am doing wrong?
---
here is what is in the file main.c:
#include <cassert>
#include <iostream>
#include <gmpxx.h> // for big integers
using namespace std;
typedef mpz_class zz_t; // Z = integers
zz_t factorial(int n);
int main()
{
int n;
cout << "---\n"
"Factorial n will be computed.\n"
"\n";
for ( ; ; ) {
cout << "Input n: ";
cin >> n;
if (!cin || n < 0)
break;
cout << "\n"
"factorial(" << n << ") = " << factorial(n) << "\n"
"\n";
}
cout << "\nBye!\n\n";
}
zz_t factorial(int n)
{
int i;
zz_t product;
assert(n >= 0);
if (n == 0 || n == 1)
return 1;
product = 1;
for (i = 2; i <= n; ++i)
product *= i;
return product;
}
---
here is the makefile:
CC = g++
CFLAGS = -Wall
EXEC = a.out
INCLS = -I$(GNU)/include
LIBS = -L$(GNU)/lib -lgmpxx -lgmp
OBJS = main.o
$(EXEC): $(OBJS)
@echo "linking ..."
@$(CC) $(CFLAGS) -o $(EXEC) $(OBJS) $(LIBS)
%.o: %.c
$(CC) $(CFLAGS) $(INCLS) -c $<
clean:
rm -f a.out *.exe *~ *.o *.obj *.tds *.stackdump
very_clean:
rm -f a.out a.exe *~ *.o *.stackdump $(EXEC).exe
relink:
@echo "relinking ..."
@$(CC) $(CFLAGS) -o $(EXEC) $(OBJS) $(LIBS)