Как скомпилировать существующий код posix для 64-битной Windows? - PullRequest
6 голосов
/ 17 мая 2009

Я в порядке с использованием Cygwin или MinGW, но мне нужно получить 64-битный код, а не 32-битный. Это потому, что я буду вызывать DLL из 64-битного управляемого C #. Я не могу найти и хорошие ссылки для настройки этих инструментов для создания 64-битных двоичных файлов. Кроме того, было бы неплохо, если бы GCC был версией 4, а не версией 3, которая шла с моей установкой Cygwin.

Альтернативой может быть некоторая форма межпроцессного взаимодействия. Я буду исследовать это, но то, что я изложил выше, это то, чего я действительно хочу.

Ответы [ 2 ]

6 голосов
/ 17 мая 2009

64-битный MinGW , основанный на (только что выпущенном) gcc-4.4.0, является, вероятно, вашим лучшим выбором. (Поскольку проект mingw-w64 на sourceforge.net перемещается на 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
0 голосов
/ 17 мая 2009

Документы gcc говорят:

Эти ключи `-m 'поддерживаются в дополнение к вышесказанному на AMD x86-64 процессоры в 64-битных средах.

-m32 -m64 Генерировать код для 32-битной или 64-битной среды. 32-разрядный окружение устанавливает int, long и указатель до 32 бит и генерирует код, который работает на любой системе i386. 64-битный среда устанавливает значение 32 бита и длинный и указатель на 64 бита и генерирует код для AMD x86-64 архитектура.

Обратите внимание, что это сведет вас с ума, я думаю, если mingw действительно так поступит, так как обычно в Windows 64 long составляет 32 бита, а long long имеет размер 64-битного указателя тип.

...