1月
19
その6の続き
今までずっと x86 を試していましたが、 x64 ではどうでしょうか。
処理系は以下のようになります。
- Windows 7 64bit
- Visual Studio 2015 / MS-C for x64
- Cygwin 64bit + gcc-core 5.4.0-1
32bit の Cygwin にも x64 向けのバイナリを出力するクロスビルド環境はありますが、ここでは 64bit 版を使っています。
x64 では呼び出し規約は1つしかないっぽいので、以前の検証で使った callee.c を以下のように修正します。
umezawa@selene ~$ cat callee.c int func(int x, int y, int z) { return x * y + z; } umezawa@selene ~$ cat main.c #include <stdio.h> int func(int x, int y, int z); int main(void) { printf("%d\n", func(2, 3, 4)); return 0; } umezawa@selene ~$ gcc -o callee_gcc.obj -c callee.c
C:\cygwin64\home\umezawa>cl /Fea.exe main.c callee_gcc.obj Microsoft(R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x64 Copyright (C) Microsoft Corporation. All rights reserved. main.c Microsoft (R) Incremental Linker Version 14.00.24215.1 Copyright (C) Microsoft Corporation. All rights reserved. /out:a.exe main.obj callee_gcc.obj C:\cygwin64\home\umezawa>a.exe 10
umezawa@selene ~$ gcc -o callee2_a_gcc.o -c callee2_a.c umezawa@selene ~$ gcc -o callee2_b_gcc.o -c callee2_b.c umezawa@selene ~$ gcc -o callee2_c_gcc.o -c callee2_c.c umezawa@selene ~$ ar cru callee2.lib callee2_*_gcc.o
C:\cygwin64\home\umezawa>cl /Fea2.exe main2.c callee2.lib Microsoft(R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x64 Copyright (C) Microsoft Corporation. All rights reserved. main2.c Microsoft (R) Incremental Linker Version 14.00.24215.1 Copyright (C) Microsoft Corporation. All rights reserved. /out:a2.exe main2.obj callee2.lib C:\cygwin64\home\umezawa>a2 20 13 6
c:\cygwin64\home\umezawa>cl /Focallee_vc_2.o /Zl /c callee.c Microsoft(R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x64 Copyright (C) Microsoft Corporation. All rights reserved. callee.c
umezawa@selene ~$ gcc -o a3 main.c callee_vc_2.o umezawa@selene ~$ ./a3 10 14
C:\cygwin64\home\umezawa>cl /Focallee2_a_vc.o /Zl /c callee2_a.c Microsoft(R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x64 Copyright (C) Microsoft Corporation. All rights reserved. callee2_a.c C:\cygwin64\home\umezawa>cl /Focallee2_b_vc.o /Zl /c callee2_b.c Microsoft(R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x64 Copyright (C) Microsoft Corporation. All rights reserved. callee2_b.c C:\cygwin64\home\umezawa>cl /Focallee2_c_vc.o /Zl /c callee2_c.c Microsoft(R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x64 Copyright (C) Microsoft Corporation. All rights reserved. callee2_c.c c:\cygwin64\home\umezawa>lib /OUT:callee2_vc.a callee2_a_vc.o callee2_b_vc.o callee2_c_vc.o Microsoft (R) Library Manager Version 14.00.24215.1 Copyright (C) Microsoft Corporation. All rights reserved.
umezawa@selene ~$ gcc -o a4 main2.c callee2_vc.a umezawa@selene ~$ ./a4 20 13 6
というわけで大丈夫なようです。
その8に続く。
no comment untill now