Pergunta

Eu estou ok com o uso de Cygwin ou MinGW, mas eu preciso acabar com código de 64 bits, não de 32 bits. Isto é porque eu vou estar ligando para a DLL de 64 bits C # administrado. Eu não consigo encontrar e boas referências para configurar essas ferramentas para criar binários de 64 bits. Além disso, seria bom se o GCC foi a versão 4, e não a versão 3 como veio com meu Cygwin instalar.

Uma alternativa seria alguma forma de comunicação entre processos. Vou pesquisar isso, mas o que eu coloquei acima é o que eu realmente quero.

Foi útil?

Solução

O 64-bit MinGW , com base em (liberado apenas) gcc-4.4.0 , é provavelmente a sua melhor aposta. (Desde que o projeto mingw-w64 em sourceforge.net está se movendo para mingw-w64.org é melhor usar mingw-w64.org )

Instruções detalhadas:
1. Baixe o arquivo
2. Extraia-lo em algum lugar sob cygwin. No meu caso, de nível superior cygwin diretório é C:\cygwin, eu extraiu o pacote para o diretório mingw, e acabou com o seguinte conteúdo em C:\cygwin\mingw (que é visível como /mingw sob 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. Agora compilar algum código C ++. Eu usei:

// t.cc
#include <vector>
#include <string>

using namespace std;
int main()
{
    vector<string> vs;
    vs.push_back("abc");
}

E compilá-lo como este:

$ /mingw/bin/x86_64-pc-mingw32-g++ t.cc

4. Finalmente, verifique o resultado é um Windows / x 64 executável, por dumpbin /headers a.exe execução:

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

Outras dicas

O docs gcc dizer:

Estas chaves `-m' são suportados no Além dos acima na AMD x86-64 processadores em ambientes de 64 bits.

-m32 -m64 gerar código para um ambiente de 32 bits ou de 64 bits. A 32 bits ambiente conjuntos int, long e ponteiro para 32 bits e gera um código que roda em qualquer sistema i386. A 64 bits conjuntos ambiente int para 32 bits e longa e o apontador de 64 bits e de gera código para x86-64 da AMD arquitetura.

Note que isso vai deixá-lo louco, eu acho que, se mingw realmente faz isso dessa forma, já que normalmente no Windows 64 longa é de 32 bits e de longo tempo é o 64-bit ponteiro-sized tipo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top