我尝试使用外部编译对象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
6条答案
按热度按时间ma8fv8wu1#
我认为coreset.o是为64位编译的,而您将它与32位computation. o链接在一起。
您可以尝试使用gcc(1)的“-m64”标志重新编译computation. c
9gm1akwq2#
您可以指定“-m32”或“-m64”来选择编译模式。
当处理autoconf(configure)脚本时,我通常在环境中设置CC=“gcc -m64”(或CC=“gcc -m32”),以便所有内容都以正确的位数编译。至少,通常...人们会找到无数的方法来使其不太起作用,但我的命中率非常高(远远超过95%)。
eit6fx6z3#
结果是我使用的编译器版本与coreset. o的编译版本不匹配。
一个是32位,另一个是64位。我将把这个放在这里,以防其他人遇到类似的问题。
r7s23pms4#
目标文件似乎是在64位工具链上编译的,而您使用的是32位工具链。是否尝试过在32位模式下重新编译目标文件?
busg9geu5#
vaqhlq816#
我在Ubuntu中运行一个已有的二进制文件时遇到了这个错误。我用以下代码修复了这个错误:
我不确定是3个库中的哪一个做的,但我相信是第三个。