64 비트 Windows의 기존 POSIX 코드를 컴파일하는 방법은 무엇입니까?
문제
Cygwin 또는 Mingw를 사용해도 괜찮지 만 32 비트가 아닌 64 비트 코드로 끝나야합니다. 64 비트 관리 C#에서 DLL을 호출하기 때문입니다. 64 비트 바이너리를 만들기위한 도구를 설정하는 것에 대한 참조를 찾을 수없고 좋은 참조가 있습니다. 또한 GCC가 Cygwin 설치와 함께 제공되는 버전 3이 아닌 버전 4 인 경우 좋을 것입니다.
대안은 어떤 형태의 의사 소통이 될 것입니다. 나는 그것을 조사 할 것이지만, 내가 위에 놓은 것은 내가 정말로 원하는 것입니다.
해결책
그만큼 64 비트 mingw, (방금 출시) GCC-4.4.0을 기반으로하는 것이 가장 좋은 방법 일 것입니다. (Sourceforge.net의 Mingw-W64 프로젝트가 mingw-w64.org로 이동하고 있기 때문에 사용하는 것이 좋습니다. mingw-w64.org)
자세한 지침 :
1. 다운로드 보관소
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. 마지막으로, 결과가 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
다른 팁
그만큼 GCC 문서 말하다:
이`-m '스위치는 64 비트 환경에서 AMD X86-64 프로세서의 위와 함께 지원됩니다.
-M32 -M64 32 비트 또는 64 비트 환경에 대한 코드를 생성합니다. 32 비트 환경은 int, Long 및 Pointer를 32 비트로 설정하고 I386 시스템에서 실행되는 코드를 생성합니다. 64 비트 환경은 int를 32 비트로 설정하고 길고 64 비트로 포인터를 설정하고 AMD의 X86-64 아키텍처에 대한 코드를 생성합니다.
Mingw가 실제로 Windows 64 Long에서 길이는 64 비트 포인터 크기 유형이기 때문에 Mingw가 실제로 그렇게하는 방식으로 당신을 미치게 할 것입니다.