2009-05-17 16 views
6

Używam Cygwin lub MinGW, ale muszę skończyć z 64-bitowym kodem, a nie 32-bitowym. Dzieje się tak, ponieważ będę wywoływał bibliotekę DLL z 64-bitowego C# zarządzanego. Nie mogę znaleźć i dobrych referencji do konfiguracji tych narzędzi do tworzenia 64-bitowych plików binarnych. Byłoby również miło, gdyby GCC był w wersji 4, a nie w wersji 3, jak to było z moją instalacją Cygwin.Jak skompilować istniejący kod POSIX dla 64-bitowego systemu Windows?

Alternatywą może być jakaś forma komunikacji międzyprocesowej. Zbadam to, ale to, co przedstawiłem powyżej, jest tym, czego naprawdę chcę.

+0

Znalazłem okno systemu Windows Ming64 na http://www.drangon.org/mingw/, które wydawało się, że wkrótce miało działać. Nie wystąpiły problemy z odnalezieniem plików nagłówkowych itp. Jednak program cc1plus.exe (nazwany g ++) uległ awarii. Westchnienie. – Fantius

Odpowiedz

6

Model 64-bit MinGW, oparty na (właśnie wydanym) gcc-4.4.0, jest prawdopodobnie najlepszym wyborem. (Ponieważ projekt MinGW-W64 na sourceforge.net porusza się mingw-w64.org lepiej wykorzystywać mingw-w64.org)

Szczegółowe instrukcje:
1. Pobierz Ekstrakt to archive
2. gdzieś pod Cygwin. W moim przypadku, katalog Cygwin najwyższego poziomu jest C:\cygwin, ja wyjął paczkę do mingw katalogu, a zakończył się z następujących treści w C:\cygwin\mingw (co jest widoczne jako /mingw pod 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. Teraz skompilować niektóre . kod C++ użyłem:

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

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

i skompilować je tak:

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

4. Wreszcie verif y wynik jest Windows/x 64 wykonywalny, uruchamiając 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

To są pakiety Linux, prawda? Chciałbym zbudować i uruchomić w systemie Windows. – Fantius

+0

Ahh, właśnie zauważyłem kompilację systemu Windows w folderze Automated Builds w opublikowanym linku. Myślę, że będzie dokładnie to, czego potrzebuję. – Fantius

+0

Mam problem z wykonaniem tej pracy. Kiedy wcześniej instalowałem MinGW32, użyłem instalatora. To nie jest instalator.Dodałem folder bin na mojej ścieżce i mogę znaleźć g ++, ale g ++ nie ma pojęcia, gdzie szukać nagłówków i bibliotek. Kiedy użyłem instalatora, wszystko po prostu zadziałało. – Fantius

0

gcc docs powiedzieć:

Te -M przełączniki są obsługiwane w oprócz wyżej AMD x86- 64 procesory w środowisku 64-bitowym.

-m32 -m64 Wygeneruj kod dla środowiska 32-bitowego lub 64-bitowego. 32-bitowe środowisko ustawia int, długi i wskaźnik na 32 bity i generuje kod, który działa na dowolnym systemie i386. Środowisko 64-bitowe ustawia na 32 bity i długie, a wskaźnik na 64 bity, a generuje kod architektury AMD x86-64 .

Uwaga, że ​​będzie jeździć szalone, myślę, jeśli MinGW naprawdę robi to w ten sposób, ponieważ zazwyczaj na Windows 64 długi ma 32 bitów i długo długo jest 64-bitowy wskaźnik wielkości typu.

+1

Próbowałem tego w Cygwin i MinGW i oboje narzekali, że tryb 64-bitowy nie został skompilowany. To było coś, co oczekiwałem, ponieważ nie mam 64-bitowej wersji żadnej z tych rzeczy. Właśnie to próbuję znaleźć. – Fantius

+1

Mingw gcc skonfigurowany z --target = x86_64-pc-mingw32 tworzy kod z sizeof (long) == 4 and sizeof (long long) == 8 –