How to specify Win32 as output when invoking GCC using MinGW on Windows.Windows上でMinGWを使用してGCCを呼び出すときに出力としてWin32を指定する方法
以下にソースコードを掲載しました。私の目的は、アセンブリとCコードをインターフェースし、実行可能ファイルを生成することです。
私は、次のNASMコマンドを使用して、Win32のにadd.asmを組み立てる開始:
nasm -f win32 add.asm
そして、Cとオブジェクトファイルの両方を使用してGCCを起動することは可能でしょうか?
gcc -o add add.obj call_asm.c
しかし、これは、リンケージエラーが発生:
C:\Users\nze\AppData\Local\Temp\cckUvRyC.o:call_asm.c:(.text+0x1e): undefined reference to `add'
collect2.exe: error: ld returned 1 exit status
私が代わりにELFファイルadd.oを使用して(
nasm -f elf add.asm
にコマンドを使用してELFにこの時間をコンパイルする場合)
gcc -o add add.o call_asm.c
作品p間違いなく
オブジェクトファイルがWin32形式であることをGCCに伝えるにはどうすればいいですか?その前にcall_asm.cをWin32にコンパイルしてリンクする必要がありますか? (私はこれが問題の核心だと思います、私が正しいかどうかをコメントしてください)。
call_add.c:
#include <stdio.h>
extern int add(int a, int b);
int main()
{
printf("%d", add(7, 6));
}
add.asm:
BITS 32
global _add
_add:
push ebp
mov ebp, esp
mov eax, [ebp+8]
mov ebx, [ebp+12]
add eax, ebx
mov esp, ebp
pop ebp
ret
この問題は表示されません。ここで例と同じことをしているようです(例::):https://www.hackthissite.org/articles/read/1079 ...(コマンドラインではなく、ソース内の "_"接頭辞のことを行い、同じ手順で.cをコンパイル+リンクしますが、いずれも問題にならないことを除いて)。おそらく、コンパイル/リンクを分割しようとし、シンボルが期待どおりの場合に.oファイルをobjdumpでチェックしてみてください。 (または他の誰かがここで問題を見つけることができます:) – Ped7g
(Windows)PEオブジェクトファイルとリンクしようとする前に、ELFオブジェクトファイルを生成しているのはGCCでしょうか? – Shuzheng
クロスコンパイラではなくmingw gccをお持ちですか?つまり、Windows上で動作するgccをインストールしたのですが、Linux用にコンパイルすることができます。それは何人かの人々が望むものなので、私はそれが存在することに驚くことはありません。それはちょうどあなたが望むものではありません。 'gcc -v'を実行してgccの設定を確認してください。 –