2009-05-17 4 views
6

Ich bin ok mit der Verwendung von Cygwin oder MinGW, aber ich muß mit 64-Bit-Code, um am Ende, nicht 32-Bit. Dies ist, weil ich die DLL von 64-Bit-verwalteten C# aufrufen werde. Ich kann nicht finden, und gute Referenzen für die Einrichtung dieser Tools zum Erstellen von 64-Bit-Binärdateien. Außerdem wäre es nett, wenn der GCC Version 4 wäre, nicht Version 3, wie es bei meiner Cygwin-Installation der Fall war.So übersetzen Posix vorhandenen Code für 64-Bit-Windows?

Eine Alternative wäre eine Form von Interprozess-Kommunikation sein. Ich werde das untersuchen, aber was ich oben dargelegt habe, ist was ich wirklich will.

+0

Ich fand eine Ming64 Windows Build unter http://www.drangon.org/mingw/, die schien zu arbeiten. Es gab keine Probleme mit Header-Dateien nicht gefunden usw. Aber dann cc1plus.exe (von g ++ aufgerufen) abgestürzt. Seufzer. – Fantius

Antwort

6

Die 64-bit MinGW, bezogen auf (nur freigegeben) gcc-4.4.0, ist wahrscheinlich die beste Wahl. (Da das mingw-w64 Projekt auf sourceforge.net bewegt mingw-w64.org es besser ist, mingw-w64.org zu verwenden)

Detaillierte Anleitungen:
1. Laden Sie die archive
2. Extrahieren es irgendwo unter Cygwin. In meinem Fall der obersten Ebene Cygwin-Verzeichnis C:\cygwin ist, extrahiert das Paket wieder in mingw Verzeichnis, und endete mit den folgenden Inhalten in C:\cygwin\mingw up (die als /mingw unter Cygwin sichtbar ist:

$ 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. Nun kompilieren einige . C++ Code, den ich verwendet:

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

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

und kompilieren sie es wie folgt aus:

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

4. Schließlich verif y das Ergebnis ist ein Windows/x 64 ausführbar, durch dumpbin /headers a.exe ausgeführt wird:

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

Das sind Linux-Pakete, oder? Ich möchte unter Windows bauen und laufen. – Fantius

+0

Ahh, ich habe gerade einen Windows-Build im Ordner "Automated Builds" unter dem von Ihnen geposteten Link bemerkt. Ich denke, das wird genau das sein, was ich brauche. – Fantius

+0

Ich habe Probleme, diese Arbeit zu machen. Als ich MinGW32 vorher installiert habe, habe ich einen Installer benutzt. Dies ist kein Installer.Ich habe den bin-Ordner zu meinem Pfad hinzugefügt und kann g ++ finden, aber g ++ hat keine Ahnung, wo nach den Headern und Bibliotheken gesucht werden soll. Als ich den Installer benutzt habe, hat alles funktioniert. – Fantius

0

Die gcc docs sagen:

Diese '-m‘Schalter sind in zusätzlich zu der oben auf AMD x86- unterstützt 64 Prozessoren in 64-Bit-Umgebungen.

-m32 -m64 Code generieren für eine 32-Bit- oder 64-Bit-Umgebung. Die 32-Bit-Umgebung setzt int, lang und Zeiger auf 32 Bit und generiert Code, läuft auf jedem i386-System. Die 64-Bit Umgebung setzt int auf 32 Bit und lang und Zeiger auf 64 Bit und erzeugt Code für AMDs x86-64 Architektur.

Beachten Sie, dass, dass Sie verrückt fahren wird, denke ich, wenn mingw es wirklich so funktioniert, da in der Regel auf 64 Lange Windows 32 Bit ist und lange dauert lange der 64-Bit-Zeiger-Größe Typ.

+1

Ich habe das in Cygwin und MinGW versucht und beide haben sich beschwert, dass der 64-Bit-Modus nicht kompiliert wird. Das ist ziemlich genau das, was ich erwartet habe, weil ich die 64-Bit-Version von keinem dieser Dinge habe. Das ist es, was ich versuche zu finden. – Fantius

+1

Der mingw gcc, der mit --target = x86_64-pc-mingw32 konfiguriert wurde, erzeugt Code mit sizeof (long) == 4 und sizeof (long long) == 8 –

Verwandte Themen