gcc错误:错误的ELF类:精灵等级64

voj3qocg  于 2023-03-18  发布在  其他
关注(0)|答案(6)|浏览(105)

我尝试使用外部编译对象coreset.o编译一个程序。我编写了public01.c测试文件,我的函数在computation. c中,这两个文件都可以编译。但是,将它们链接在一起时失败了。可能是什么问题?

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
ma8fv8wu

ma8fv8wu1#

我认为coreset.o是为64位编译的,而您将它与32位computation. o链接在一起。
您可以尝试使用gcc(1)的“-m64”标志重新编译computation. c

9gm1akwq

9gm1akwq2#

您可以指定“-m32”或“-m64”来选择编译模式。
当处理autoconf(configure)脚本时,我通常在环境中设置CC=“gcc -m64”(或CC=“gcc -m32”),以便所有内容都以正确的位数编译。至少,通常...人们会找到无数的方法来使其不太起作用,但我的命中率非常高(远远超过95%)。

eit6fx6z

eit6fx6z3#

结果是我使用的编译器版本与coreset. o的编译版本不匹配。
一个是32位,另一个是64位。我将把这个放在这里,以防其他人遇到类似的问题。

r7s23pms

r7s23pms4#

目标文件似乎是在64位工具链上编译的,而您使用的是32位工具链。是否尝试过在32位模式下重新编译目标文件?

busg9geu

busg9geu5#

sudo apt-get install ia32-libs
vaqhlq81

vaqhlq816#

我在Ubuntu中运行一个已有的二进制文件时遇到了这个错误。我用以下代码修复了这个错误:

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

我不确定是3个库中的哪一个做的,但我相信是第三个。

相关问题