7

我可以使用 Cygwin 或 MinGW,但我需要以 64 位代码结束,而不是 32 位代码。这是因为我将从 64 位托管 C# 调用 DLL。对于设置这些工具来创建 64 位二进制文​​件,我似乎找不到很好的参考资料。此外,如果 GCC 是版本 4,而不是我的 Cygwin 安装附带的版本 3,那就太好了。

另一种选择是某种形式的进程间通信。我会对此进行研究,但我上面列出的是我真正想要的。

4

2 回答 2

7

基于(刚刚发布的)gcc-4.4.0的64 位 MinGW可能是您最好的选择。(由于 sourceforge.net 上的 mingw-w64 项目正在迁移到 mingw-w64.org,最好使用mingw-w64.org

详细说明:
1. 下载存档
2. 在 cygwin 下解压。在我的例子中,顶级 cygwin 目录是C:\cygwin,我将包解压缩到mingw目录中,并最终在(在 cygwin 下C:\cygwin\mingw可见:/mingw

$ 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. 最后,通过运行验证结果是 Windows/x 64 可执行文件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
于 2009-05-17T03:00:22.950 回答
0

gcc 文档说:

除了上述之外,在 64 位环境中的 AMD x86-64 处理器上还支持这些“-m”开关。

-m32 -m64 为 32 位或 64 位环境生成代码。32 位环境将 int、long 和指针设置为 32 位,并生成可在任何 i386 系统上运行的代码。64 位环境将 int 设置为 32 位,将 long 和指针设置为 64 位,并为 AMD 的 x86-64 架构生成代码。

请注意,我认为,如果 mingw 真的这样做,那会让你发疯,因为通常在 Windows 64 上 long 是 32 位,而 long long 是 64 位指针大小的类型。

于 2009-05-17T03:03:14.037 回答