我正在使用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