64 비트 Windows의 기존 POSIX 코드를 컴파일하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/873812

  •  22-08-2019
  •  | 
  •  

문제

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가 실제로 그렇게하는 방식으로 당신을 미치게 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top