我可以使用Cygwin或MinGW,但我需要最终得到64位代码,而不是32位代码。这是因为我将从64位托管C#调用DLL。我似乎无法找到设置这些工具来创建64位二进制文件的好参考。此外,如果GCC是版本4,而不是我的Cygwin安装版本3,那将是很好的。
另一种选择是某种形式的进程间通信。我会研究这个,但我上面列出的是我真正想要的。
答案 0 :(得分:6)
基于(刚刚发布)gcc-4.4.0的64-bit MinGW可能是您最好的选择。 (由于sourceforge.net上的mingw-w64项目正在转向mingw-w64.org,最好使用mingw-w64.org)
详细说明:
1.下载archive
2.在cygwin下的某处提取它。在我的例子中,顶级cygwin目录是C:\cygwin
,我将包解压缩到mingw
目录,最后得到C:\cygwin\mingw
中的以下内容(显示为/mingw
在cygwin下:
$ ls -l /mingw
total 1
drwxr-xr-x+ 2 user None 0 May 10 08:32 bin
drwxr-xr-x+ 2 user None 0 May 10 05:45 include
drwxr-xr-x+ 2 user None 0 May 10 08:30 info
drwxr-xr-x+ 3 user None 0 May 10 08:30 lib
drwxr-xr-x+ 3 user None 0 May 10 05:45 libexec
drwxr-xr-x+ 4 user None 0 May 10 05:45 man
lrwxrwxrwx 1 user None 17 May 17 17:20 mingw -> x86_64-pc-mingw32
drwxr-xr-x+ 3 user None 0 May 10 04:16 share
drwxr-xr-x+ 5 user None 0 May 10 04:18 x86_64-pc-mingw32
3。现在编译一些C ++代码。我用过:
// t.cc
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> vs;
vs.push_back("abc");
}
然后像这样编译:
$ /mingw/bin/x86_64-pc-mingw32-g++ t.cc
4。最后,通过运行dumpbin /headers a.exe
:
Microsoft (R) COFF/PE Dumper Version 7.00.9466
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file a.exe
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
8664 machine (AMD64)
10 number of sections
4A10AF9F time date stamp Sun May 17 17:45:19 2009
ABA00 file pointer to symbol table
EC4 number of symbols
F0 size of optional header
27 characteristics
Relocations stripped
Executable
Line numbers stripped
Application can handle large (>2GB) addresses
答案 1 :(得分:0)
gcc docs说:
支持这些`-m'开关 除了上面的AMD x86-64之外 64位环境中的处理器。
-m32 -m64为32位或64位环境生成代码。 32位 环境设置int,long和指针 到32位并生成代码 在任何i386系统上运行。 64位 环境将int设置为32位和 long和64位指针 为AMD的x86-64生成代码 架构。
请注意,如果mingw确实这样做,那将会让你发疯,因为通常在Windows 64上长度是32位而长长度是64位指针大小 类型。