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

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

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

А 64-битный МинГВ, основанный на (только что выпущенном) 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

Другие советы

А документация gcc сказать:

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

-M32 -M64 Сгенерировать код для 32-битной или 64-битной среды.32-разрядная среда устанавливает Int, Long и указатель на 32 бит и генерирует код, который работает в любой системе I386.64-разрядная среда устанавливает INT до 32 бит и длиной и указан на 64 бит и генерирует код для архитектуры AMD X86-64.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top