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

如何将编译器路径作为变量参数传入exec函数?

解决方案

直接修改代码,从命令行参数中读取编译器路径,并调整参数数组传递给execvp即可,具体实现如下:

// 编译命令:gcc prog.c -o prog
#include <unistd.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
    // 校验输入参数:必须至少传入编译器路径
    if (argc < 2) {
        fprintf(stderr, "用法: %s <编译器路径/名称> [编译链接参数...]\n", argv[0]);
        return 1;
    }

    // 用命令行第一个参数作为编译器,后续参数直接传递
    // argv+1 构成新的参数数组:[编译器名, 参数1, 参数2, ..., NULL]
    execvp(argv[1], argv + 1);

    // 走到这里说明execvp执行失败
    perror("execvp 调用失败");
    return 1;
}

关键说明

  • 运行时直接通过命令行传入编译器和参数,比如你需要的:
    ./prog mips64-unknown-linux-gcc --sysroot=<<...>> -O3 -Wl -L <<...>> -L <<...>> -I <<...>> -L <<...>> abcd.o a1.o b2.o -o prog
    
  • execvp会自动处理两种情况:如果传入的是编译器的绝对/相对路径,直接执行;如果是文件名(比如gcc),则会在PATH环境变量中查找对应程序。
  • 参数校验避免了用户未传入编译器时的无意义崩溃,错误提示更清晰。
  • execvp成功执行后,当前进程会被编译器进程完全替换,不会返回;只有执行失败时才会走到后续的错误处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:39:12