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

Ubuntu下执行make run生成的可执行文件报错execvp无效参数怎么解决

错误原因
  • 头文件缺失:main.c中调用了printf、scanf标准库函数,但没有引入<stdio.h>头文件,会导致函数隐式声明问题,编译生成的文件结构异常。
  • 全局变量重复定义:C代码中已经定义了op1、op2、res三个全局变量,汇编代码中又将这三个变量放入.data段声明,属于重复定义全局符号,链接后生成的main文件为无效可执行文件,系统无法正常加载运行,因此触发execvp: ./main: invalid argument报错,错误码127对应可执行文件无法加载的场景。
  • 可选项排查:如果Makefile中各目标下的命令行没有用TAB缩进(而是用空格代替),也会导致编译流程异常,生成无效可执行文件。
修复步骤
  1. 修改main.c,在文件顶部添加标准输入输出头文件引用:
#include <stdio.h>
#include "asm.h"
int op1 = 0, op2 = 0, res = 0;
int main()
{
    printf("Valor op1:");
    scanf("%d", &op1);
    printf("Valor op2:");
    scanf("%d", &op2);
    sum();
    printf("sum = %d:0x%x\n", res, res);
    return 0;
}
  1. 修改asm.s汇编文件,移除.data段中重复的变量定义,改用.extern声明三个全局变量来自外部文件:
.extern op1
.extern op2
.extern res
.section .text
.global sum # void sum(void)
sum:
movl op1(%rip), %ecx #place op1 in ecx
movl op2(%rip), %eax #place op2 in eax
addl %ecx, %eax #add ecx to eax. Result is in eax
movl %eax, res(%rip) # copy the result to res
ret
  1. 执行make clean清理之前生成的错误目标文件和可执行文件,再执行make run即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:06:04