GCC在命令行上使用 gcc main.c -o bfcout
調用它時會編譯我的C腳本。我在Ruby中寫了一個腳本,其中第36行表示system("gcc main.c -o bfcout")
。我也試過bash -C#{Shellwords.escape("gcc -Wall #{filename}.c -o bfcompoutput")}
。在Ruby中由system()調用GCC時不會編譯
但我得到一個錯誤:/usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/../../../../lib/crt1.o: In function '_start': (.text+0x20): undefined reference to 'main'
有一個main()函數,正如我所說,編譯在命令行上的作品!這裏有什麼問題?編輯: C文件看起來像這樣。它由腳本生成。是的,這是對Brainf ***的參考。對不起,許多行(和格式不正確)。
#include <stdio.h>
unsigned char _c[30000]={};
int ptr=0;
int main(){
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
while (_c[ptr]) {
++ptr;
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++ptr;
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++ptr;
++_c[ptr];
++_c[ptr];
++_c[ptr];
++ptr;
++_c[ptr];
--ptr;
--ptr;
--ptr;
--ptr;
--_c[ptr];
}
++ptr;
++_c[ptr];
++_c[ptr];
putchar(_c[ptr]);
++ptr;
++_c[ptr];
putchar(_c[ptr]);
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
putchar(_c[ptr]);
putchar(_c[ptr]);
++_c[ptr];
++_c[ptr];
++_c[ptr];
putchar(_c[ptr]);
++ptr;
++_c[ptr];
++_c[ptr];
putchar(_c[ptr]);
--ptr;
--ptr;
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
++_c[ptr];
putchar(_c[ptr]);
++ptr;
putchar(_c[ptr]);
++_c[ptr];
++_c[ptr];
++_c[ptr];
putchar(_c[ptr]);
--_c[ptr];
--_c[ptr];
--_c[ptr];
--_c[ptr];
--_c[ptr];
--_c[ptr];
putchar(_c[ptr]);
--_c[ptr];
--_c[ptr];
--_c[ptr];
--_c[ptr];
--_c[ptr];
--_c[ptr];
--_c[ptr];
--_c[ptr];
putchar(_c[ptr]);
++ptr;
++_c[ptr];
putchar(_c[ptr]);
++ptr;
putchar(_c[ptr]);
++_c[ptr];
++_c[ptr];
++_c[ptr];
putchar(_c[ptr]);
return 0;
}
腳本在Ruby中:
require 'shellwords'
code = ""
loop do
x = gets.chomp
break if x=="__END__"
code << x
end
code_arr = []
code.split("").each {|ch|
case ch
when ">";code_arr << "++ptr;"
when "<";code_arr << "--ptr;"
when "+";code_arr << "++_c[ptr];"
when "-";code_arr << "--_c[ptr];"
when ".";code_arr << "putchar(_c[ptr]);"
when ",";code_arr << "_c[ptr] = getchar();"
when "[";code_arr << "while (_c[ptr]) {"
when "]";code_arr << "}"
end
}
filename = "main"
sp = ""
ostr = "#include <stdio.h>\nunsigned char _c[30000]={};#{sp}int ptr=0;#{sp}int main(){#{code_arr.join(sp)+sp}return 0;#{sp}}"
File.open("#{filename}.c","w").write(ostr)
puts ostr
result = system("gcc -Wall #{filename}.c -o ./#{filename}")
puts "Process exited with code #{result}"
你介意發佈你的.c文件嗎? –
真奇怪!在告訴你一些事情之前,Il試圖重現錯誤。 –
我在這裏重複完全一樣,它編譯正確。我認爲你的安裝有問題。你是否安裝了所有的構建工具? –