如何为 64 位 Windows 编译现有的 posix 代码? [英] How to compile existing posix code for 64-bit Windows?
问题描述
我可以使用 Cygwin 或 MinGW,但我最终需要使用 64 位代码,而不是 32 位代码.这是因为我将从 64 位托管 C# 调用 DLL.我似乎无法找到设置这些工具以创建 64 位二进制文件的良好参考.此外,如果 GCC 是第 4 版,而不是我的 Cygwin 安装附带的第 3 版,那就太好了.
I'm ok with using Cygwin or MinGW, but I need to end up with 64-bit code, not 32-bit. This is because I will be calling the DLL from 64-bit managed C#. I can't seem to find and good references for setting up those tools to create 64-bit binaries. Also, it would be nice if the GCC was version 4, not version 3 as came with my Cygwin install.
另一种方法是某种形式的进程间通信.我会研究一下,但我上面列出的是我真正想要的.
An alternative would be some form of interprocess communication. I will research that, but what I laid out above is what I really want.
推荐答案
64 位 MinGW 基于(刚刚发布的)gcc-4.4.0,可能是你最好的选择.(由于 sourceforge.net 上的 mingw-w64 项目正在转移到 mingw-w64.org,因此最好使用 mingw-w64.org)
The 64-bit MinGW, based on (just released) gcc-4.4.0, is probably your best bet. (Since the mingw-w64 project on sourceforge.net is moving to mingw-w64.org it's better to use mingw-w64.org)
详细说明:
1.下载存档
2. 将其解压缩到 cygwin 下的某个位置.在我的例子中,顶级cygwin目录是C:cygwin
,我将包解压到mingw
目录,最后在C中得到以下内容:cygwinmingw
(在 cygwin 下显示为 /mingw
:
Detailed instructions:
1. Download the archive
2. Extract it somewhere under cygwin. In my case, top-level cygwin directory is C:cygwin
, I extracted the package into mingw
directory, and ended up with the following contents in C:cygwinmingw
(which is visible as /mingw
under 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++ 代码.我用过:
3. Now compile some C++ code. I used:
// 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
来验证结果是 Windows/x 64 可执行文件:
4. Finally, verify the result is a Windows/x 64 executable, by running 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
这篇关于如何为 64 位 Windows 编译现有的 posix 代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!