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")}
を試しました。 /usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/../../../../lib/crt1.o: In function '_start': (.text+0x20): undefined reference to 'main'
Rubyでsystem()によって呼び出されたときにGCCがコンパイルされない
は、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ファイルを投稿してもよろしいですか? –
本当に奇妙です!あなたに何かを伝える前に、ここでエラーを再現しようとします。 –
私はここで全く同じことを繰り返し、正確にコンパイルしました。あなたのインストールに何か問題があると仮定しています。すべてのビルドツールがインストールされていますか? –