使用 exec() 编译和运行 C 程序



我正在使用execv((编写一个程序,该程序可以编译并运行另一个程序。我编写了一个名为helloWorld.c的简单C程序,当执行输出时,"Hello world"和一个名为testExec.c的第二个文件,它应该编译并运行helloWorld.c。我一直在四处寻找一种方法,但我没有找到任何答案。testExec.c 中的代码是:

#include <stdio.h>
#include <unistd.h>
int main(){
   char *args[] = {"./hellWorld.c", "./a.out", NULL};
   execv("usr/bin/cc", args);
   return 0;
}

testExec.c编译没有错误。但是,当我运行它时,我收到一个错误,说"致命错误:-fuse-linker-plugin,但liblto_plugin.so 找不到。编译已终止。我认为这意味着helloWorld.c正在编译中,但是当需要运行helloWorld.c时,会抛出此错误。我想这可能是因为我有a.out和helloWorld.c以"./"开头。我从两个中删除了"./",然后单独删除了一个,但仍然没有运气。

我还做了"sudo apt-get install build-essential"以及"sudo apt-get install gcc"。我不确定这是否会解决问题,但我真的不确定还能尝试什么。无论如何,任何帮助将不胜感激!

调用 cc 时缺少前导斜杠。

此外,参数列表中的第一个参数是可执行文件的名称。 实际的争论在那之后。 您也没有使用 -o 来指定输出文件的名称。

#include <stdio.h>
#include <unistd.h>
int main(){
   char *args[] = {"cc", "-o", "./a.out", "./hellWorld.c", NULL};
   execv("/usr/bin/cc", args);
   return 0;
}

编辑:

以上仅供编译。 如果要编译和运行,可以执行以下操作:

#include <stdio.h>
#include <unistd.h>
int main(){
   system("cc -o ./a.out ./hellWorld.c");
   execl("./a.out", "a.out", NULL);
   return 0;
}

尽管这可能最好作为 shell 脚本完成:

#!/bin/sh
cc -o ./a.out ./hellWorld.c
./a.out

相关内容

  • 没有找到相关文章

最新更新