You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86_64 Ubuntu18.04环境GCC生成ELF64程序无法执行、内核模块为ELF32问题咨询

问题根因与修复方案

应用程序运行失败修复

你编译hello程序时添加了-c参数,该参数作用是仅执行编译步骤、不进行链接,生成的hello文件是ELF格式的目标文件(.o文件),不是可执行程序,因此运行时会报Exec format error。
修复方式非常简单:去掉-c参数即可,正确编译命令如下:

gcc -o hello -v hello.c
chmod +x hello
./hello

内核模块编译/加载异常修复

你遇到的内核模块格式异常和编译报错可以按以下步骤逐一修复:

  • 修复自定义链接规则的架构配置:你的Makefile中自定义了pcie.o: $(pcie_objs)的链接规则,直接调用系统默认ld命令,若环境中32位ld优先级高于64位ld、或是ld默认编译目标为32位,就会生成32位内核模块,加载时报ELF结构错误。将链接命令修改为指定64位架构的版本即可:
    ld -m elf_x86_64 -r $^ -o $@
    
  • 修复-m64参数编译报错:首先确认当前调用的gcc是否为优先级更高的32位版本,执行readelf -h $(which gcc)即可查看gcc本身的架构,若为32位,执行以下命令重装64位gcc:
    sudo apt install --reinstall gcc-7 x86_64-linux-gnu-gcc-7
    
    编译模块前可以手动指定使用64位gcc:export CC=x86_64-linux-gnu-gcc-7
  • 移除冗余编译参数:内核模块编译默认会继承当前运行内核的编译参数,不需要手动添加-march=x86-64或者-m64参数,手动添加反而可能和内核自带的编译参数冲突,建议先删除EXTRA_CFLAGS里的-m64再编译。

GCC配置选项较长的说明

Ubuntu官方源提供的GCC默认开启了多架构支持、多语言支持、安全加固等特性,因此配置参数较长属于正常现象,和你当前遇到的问题无关。

内容的提问来源于stack exchange,提问作者Robert Hu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 17:57:01