2008-10-19 92 views
29

我试图编译一个使用外部编译对象coreset.o的程序。我写了public01.c测试文件,我的函数在comput.c中,两者都编译。然而它没有把它连接在一起。可能是什么问题?gcc错误:ELF类错误:ELFCLASS64

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 

回答

33

我认为coreset.o是为64位编译的,而且你将它与一个32位的compute.o链接起来。

您可以尝试重新编译computation.c与gcc(1)

3

事实证明,我使用的编译器版本与使用coreset.o完成的编译版本不匹配。

一个是32位,另一个是64位。如果有其他人遇到类似的问题,我会保留这一点。

3

它看起来就像是一个64位的工具链编译的目标文件中的“-m64”标志,并且您使用的是32位的工具链。你有没有尝试在32位模式下重新编译目标文件?

6

您可以指定'-m32'或'-m64'来选择编译模式。

在处理autoconf(configure)脚本时,我通常在环境中设置CC =“gcc -m64”(或CC =“gcc -m32”),以便正确编译所有内容。至少,通常......人们发现无尽的方式让这种方式不起作用,但我的击球平均水平非常高(超过95%)。

+0

好奇:为什么使用`CC = gcc -m32`而不是`CFLAGS = -m32`? – 2012-09-14 21:13:57

+1

主要是因为CFLAGS通常包含_N_其他我不想zap的重要标志(包括目录,定义标志,优化和警告选项等)。 – 2012-09-14 21:17:16

2
sudo apt-get install ia32-libs 
+0

这个答案对于一个相关的问题是非常有用的:当运行一个可执行文件时,你可以得到几乎相同的消息,这是解决这个问题的方法。所以一个来自我的慈善+1。 – 2013-10-03 13:52:18

0

包ia32-libs不可用,但被其他包引用。 这可能意味着包丢失,已过时,或 只能从其他来源 但是下面的软件包替换: lib32z1 lib32ncurses5

E:包“IA32-库”没有安装候选人