知恵袋でも質問しているのですが
(話のレベルが低・・・)
回答がつかないので解決方法を教えてほしいです。
MinGWを導入し、コンパイルできる環境を構築しました。
c
1#include <stdio.h> 2 3int main(void){ 4return 0; 5}
gcc -S sample.cでアセンブラファイルを出力
s
1.file "sample.c" 2 .def ___main; .scl 2; .type 32; .endef 3 .text 4 .globl _main 5 .def _main; .scl 2; .type 32; .endef 6_main: 7LFB10: 8 .cfi_startproc 9 pushl %ebp 10 .cfi_def_cfa_offset 8 11 .cfi_offset 5, -8 12 movl %esp, %ebp 13 .cfi_def_cfa_register 5 14 andl $-16, %esp 15 call ___main 16 movl $0, %eax 17 leave 18 .cfi_restore 5 19 .cfi_def_cfa 4, 4 20 ret 21 .cfi_endproc 22LFE10: 23 .ident "GCC: (MinGW.org GCC-6.3.0-1) 6.3.0"
as -o sample sample.sよりオブジェクトファイル生成
o
1コピペ不可能でした。
gcc -o sample sample.o
よりオブジェクトファイルの生成ができるようになりました。
私がやりたいのは
こちらのサイトで紹介されている
アセンブリ言語 Hello Worldを実行ファイルにして、実行させてみたいです。
s
1.file "hello.s" 2.data 3msg: .ascii "hello world\n" 4msgend: .equ len, msgend - msg 5 6.bss 7.text 8.globl main 9main: 10 movl $4, %eax # write system call(sys_write) 11 movl $1, %ebx # arg1:stdout 12 movl $msg, %ecx # arg2:str 13 movl $len, %edx # arg3:strlen 14 int $0x80 # system call 15 ret
形式は同じのはずです。
で、やってみると
(ファイル名 a)
as -o a.o a.sよりオブジェクトファイル生成(エラーなし)
オブジェクトファイルから実行ファイル生成
cmd
1C:\Users\u16154\Desktop\asemble>gcc -o a a.o 2c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16' 3collect2.exe: error: ld returned 1 exit status
Google翻訳使ったのですが・・・
english
1libmingw32.a(main.o):(。text.startup + 0xa0): `WinMain @ 16 'への未定義の参照
OSの問題ですか?(システムコールとかの)
今回はどこに勘違いがあるのでしょうか?
ご教授お願いします。
回答2件
あなたの回答
tips
プレビュー