我正在尝试在 shell 脚本中使用 GCC,但我不想使用输入文件,而是使用包含我的代码的变量。
现在我这样做了:
echo '
#include <stdio.h>
int main(){
int a=1,b;
printf("Donnez un nombre : ");
scanf("%d", &b);
a+=b;
printf("test%d\n",a );
return 0;
}
' > .temp.c
#Entrez le texte ici
gcc .temp.c -o .ex -std=c99
我可以做类似gcc $inputCode -o executable
的事情吗?
此外,如果有人知道我是否可以在不生成任何文件的情况下执行此 c 代码?
谢谢!
最佳答案
你可以这样做:echo whatever | gcc -x c -o .ex -
但我认为这不值得。
一个可能更简洁的替代方案 [您既没有执行 \"
也没有执行 \'
]。请注意 trap
示例可能不完全正确,但可能是您想要实现的目标。
cat << EOF | gcc -x c -o .ex -
int
main(void)
{
return 'a';
}
EOF
trap "rm -f .ex" SIGINT
.ex
rm -f .ex
但是,您仍然必须创建输出 ELF 可执行文件文件。部分原因是操作系统需要嵌入式 ELF 加载程序(例如 /lib64/ld-linux-x86-64.so.2
)来了解如何加载可执行文件。
我已经多次执行“脚本从源代码创建 C 可执行文件”,我只是创建 .c 和可执行文件,然后再执行 rm
。我在 perl
中执行此操作,其中 C 文本出现在 __DATA__
之后,我执行 unlink
函数调用而不是 rm
关于无输入编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33858132/