1
私はこのATファイルを、& Tアセンブリで書いています。Cygwin Winでアセンブリ(.s)コードをコンパイルできません
.globl interleave
interleave:
pushl %ebx
pushl %esi
pushl %edi
movl 16(%esp), %ebx #a
movl 20(%esp), %esi #b
movl 24(%esp), %edi #c
D: movb (%ebx), %cl
testb %cl, %cl
jz W
movb %cl, (%edi) #*c
incl %edi
incl %ebx
T: movb (%esi), %dl
testb %dl, %dl
jz W
movb %dl, (%edi) #*c
incl %edi
incl %esi
W: orb %cl,%dl
jz E
#movb $0, %al
jmp D
E: movb $0, (%edi)
popl %edi
popl %esi
popl %ebx
ret
私は、次のメインファイルでcygwinのたWindows 10上で、それをコンパイルしたいが、それは動作しません。 gcc
で
void interleave(const char* a, const char* b, char* c) ;
int main(int argc, char const *argv[]){
const char* a = "car";
const char* b = "old";
char c[] = "";
interleave(a,b,c);
printf("%s (expected coalrd)\n", c);
return 0;}
私はgcc -m32
でes1B.s:3: Error: invalid instruction suffix for push
を取得し、私は私もi686-w64-mingw32-gcc
と32ビットでそれをコンパイルしようとしたが、私は私ができる午前undefined reference to interleave
を取得collect2: error: ld returned 1 exit status
を取得それをコンパイルし、gcc -m32
、bとlinuxで実行するあなたは窓でこの作業をする方法はありますか?
感謝のコメントで提案されているように、関数名の前アンダースコアを追加することで解決
'.globl interleave'が見つかりませんでした。 – Jester
Windowsでは、cdecl関数のシンボル名の先頭にアンダースコアを付ける必要があります。おそらく、なぜあなたは "未定義の参照"エラーを取得するのですか? – fuz
@fuzありがとう、私はそれを知らなかった!それは今働きます! :) – Ford1892