33

I was trying to compile a program using an external compiled object coreset.o. I wrote the public01.c test file and my functions are in computation.c, both of which compiles. However its failing on linking it together. What might be the problem?

gcc -o public01.x public01.o computation.o coreset.o ld: fatal: file coreset.o: wrong ELF class: ELFCLASS64 ld: fatal: File processing errors. No output written to public01.x collect2: ld returned 1 exit status 

6 Answers 6

36

I think that coreset.o was compiled for 64-bit, and you are linking it with a 32-bit computation.o.

You can try to recompile computation.c with the '-m64' flag of gcc(1)

Sign up to request clarification or add additional context in comments.

Comments

8

You can specify '-m32' or '-m64' to select the compilation mode.

When dealing with autoconf (configure) scripts, I usually set CC="gcc -m64" (or CC="gcc -m32") in the environment so that everything is compiled with the correct bittiness. At least, usually...people find endless ways to make that not quite work, but my batting average is very high (way over 95%) with it.

2 Comments

Curious: why use CC=gcc -m32 instead of CFLAGS=-m32?
Mainly because CFLAGS usually contains N other important flags that I don't want to zap (include directories, define flags, optimization and warning options, etc).
5

It turns out the compiler version I was using did not match the compiled version done with the coreset.o.

One was 32bit the other was 64bit. I'll leave this up in case anyone else runs into a similar problem.

1 Comment

I am facing similar issue but didn't get much out of this post. Any help would be appreciated. You can find my question here, stackoverflow.com/questions/71795862/…
4

It looks like the object file was compiled on a 64-bit toolchain, and you're using a 32-bit toolchain. Have you tried recompiling the object file in 32-bit mode?

Comments

4
sudo apt-get install ia32-libs 

1 Comment

This answer was very useful for a related issue: when running an executable you can get an almost identical message and this is the solution to that problem. So a charitable +1 from me.
0

I got this error when trying to run an existing binary in Ubuntu. I fixed with:

apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 

I'm not sure which of the 3 libs did it, but I believe it was the 3rd one.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.