64 bit libraries für MinGW_w64

Thomasio

Erfahrenes Mitglied
Nachdem ich es erfolgreich geschafft habe MinGW_w64 zu installieren, durfte ich feststellen, dass im Vergleich zur 32 bit Version der lib Ordner fast leer ist.
In der 32 bit Version findet sich alles was man braucht, in meinem Fall libcomctl32.a, libwininet.a libwinmm.a und libwsock32.a.
In der 64bit Version gibt es nichts davon.
Das Selbe in Ordner include, in der 32 bit Version alles da, von time.h bis wininet.h, in der 64 bit Version Fehlanzeige.

Ich Anfänger habe natürlich mal wieder keine Ahnung, ich kann mir nur nicht vorstellen, dass MinGW eine 64 bit Version ohne libraries rausgibt, aber ich finde im ganzen Web nichts, woher ich den Kram nehmen soll.
Irgendwo habe ich was gelesen von Microsoft Windows SDK, da sind die Sachen alle drin, allerdings nicht als *.a sondern als *.lib und dann finden sich ein paar Dutzend Hinweise die sich alle widersprechen, ob man die nun direkt nutzen kann, oder konvertieren muss, und wenn, dann wie.

Kann mich jemand aufklären?
 
Nachdem ich es erfolgreich geschafft habe MinGW_w64 zu installieren, durfte ich feststellen, dass im Vergleich zur 32 bit Version der lib Ordner fast leer ist.
In der 32 bit Version findet sich alles was man braucht, in meinem Fall libcomctl32.a, libwininet.a libwinmm.a und libwsock32.a.
In der 64bit Version gibt es nichts davon.
Das Selbe in Ordner include, in der 32 bit Version alles da, von time.h bis wininet.h, in der 64 bit Version Fehlanzeige.
Welche Datei(en) hast du heruntergeladen bzw. wie bist du bei der Installation vorgegangen? In mingw-w64-bin_i686-mingw_20100414.zip sind diese Dateien nämlich sämtlich enthalten.

Grüße,
Matthias
 
Hui, ok, da ist mehr drin als in der die ich hatte, danke dafür.
Allerdings ist da soviel drin, dass ich jetzt den Wald vor lauter Bäumen nicht mehr sehe.
Welche *.a und *.h bzw. welche Verzeichnisse sind denn nun die mit den 64 bit libraries/headers?

Zwar gibt es jetzt mehrere Ordner namens lib in mehreren Unterordnern, aber die Ordner mit dem Namen "lib64" sind nach wie vor fast leer.
 
Hui, ok, da ist mehr drin als in der die ich hatte, danke dafür.
Allerdings ist da soviel drin, dass ich jetzt den Wald vor lauter Bäumen nicht mehr sehe.
Welche *.a und *.h bzw. welche Verzeichnisse sind denn nun die mit den 64 bit libraries/headers?

Zwar gibt es jetzt mehrere Ordner namens lib in mehreren Unterordnern, aber die Ordner mit dem Namen "lib64" sind nach wie vor fast leer.
Ich kann das gerade nicht testen, aber das in lib sollten schon die x64-Bibliotheken sein. Hast du denn schon mal versucht gegen sie zu linken?

Grüße,
Matthias
 
Ja habe ich, da bekomme ich eine endlos lange Fehlermeldung die besagt:
warning: auto-importing has been activated without --enable-auto-import specified on the command line

Anderweitig im Web habe ich dazu die Info gefunden, das bedeutet, dass das eigentlich VC.lib files sind, die irgendwie konvertiert wurden, aber trotzdem in dieser Form nicht kompatibel zu MinGW sind.
Dazu gibt es tonnenweise Anleitungen, wie man das irgendwie hintenrum zurechtbiegen soll, meist inkl. editieren von 100ten der Dateien.
Das kanns irgendwie nicht sein.
 
Ja habe ich, da bekomme ich eine endlos lange Fehlermeldung die besagt:
warning: auto-importing has been activated without --enable-auto-import specified on the command line
Ich hab es grade mal selber ausprobiert und kann das leider nicht nachvollziehen:

Code:
PS E:\mingw-w64-bin_i686-mingw_20100414> cat test.c
#include <stdio.h>
#include <windows.h>
#include <mmsystem.h>

int main(int argc, char *argv[]) {
        printf("Pointer size: %d bits\n", 8*sizeof(void *));
        PlaySound("C:\\Windows\\Media\\tada.wav", NULL, SND_FILENAME);
        return 0;
}
PS E:\mingw-w64-bin_i686-mingw_20100414> .\bin\x86_64-w64-mingw32-gcc.exe -o tes
t.exe test.c -lwinmm
PS E:\mingw-w64-bin_i686-mingw_20100414> .\test.exe
Pointer size: 64 bits
PS E:\mingw-w64-bin_i686-mingw_20100414>

Kannst du deshalb bitte mal ein Minimalbeispiel erstellen und auch dazu sagen, wie genau du gcc aufrufst?

Grüße,
Matthias
 
Ich rufe MinGW gar nicht selber auf, sondern nutze Code::Blocks und klicke dort einfach auf Project - Build, wobei ich unter Toolchain executables einfach den Pfad zum MinGW64 Verzeichnis eintrage.
Dein Beispiel funktioniert, gibt aus "Pointer size: 64 bits" (nachdem ich im Linker libwinmm.a eingetragen habe).
Allerdings gibt er mir ein

warning: format '%d' expects type 'int', but argument 2 has type 'long long unsigned int'

Was nicht geht sind Sachen wie winsock, wenn ich libwinsock.a in den linker eintrage, und
#inclide <winsock.h>
kommt er mir mit
auto-importing has been activated without --enable-auto-import specified on the command line
sobald ich versuche einen socket zu verbinden.

Code:
#include <windows.h>
#include <winsock.h>
int WINAPI WinMain (HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{
WSADATA wsa;
WSAStartup(MAKEWORD(2,0),&wsa);
long rc;
SOCKET s = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(1234);
addr.sin_addr.s_addr=inet_addr("localhost");
rc = connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
}
 
Ich rufe MinGW gar nicht selber auf, sondern nutze Code::Blocks und klicke dort einfach auf Project - Build, wobei ich unter Toolchain executables einfach den Pfad zum MinGW64 Verzeichnis eintrage.
Kannst du trotzdem bitte versuchen rauszufinden, mit welchen Parametern der Compiler aufgerufen wird? Das sollte Code::Blocks doch hoffentlich mit ausgeben.

Dein Beispiel funktioniert, gibt aus "Pointer size: 64 bits" (nachdem ich im Linker libwinmm.a eingetragen habe).
Allerdings gibt er mir ein

warning: format '%d' expects type 'int', but argument 2 has type 'long long unsigned int'
Ja, da war ich etwas schlampig, da hätte man einen anderen Formatspezifizierer verwenden sollen (ich weiß aus dem Stegreif grad nicht welchen). Aber bei einem so kleinen Testprogramm kann man diese Warnung auch mal ignorieren.

Was nicht geht sind Sachen wie winsock, wenn ich libwinsock.a in den linker eintrage, und
#inclide <winsock.h>
kommt er mir mit
auto-importing has been activated without --enable-auto-import specified on the command line
sobald ich versuche einen socket zu verbinden.
Eine libwinsock.a habe ich hier nicht mal. Bei Einbindung von libwsock32.a lässt sich dein Beispielprogramm aber problemlos linken. Beim Compilieren gibt es lediglich die zwei (berechtigten) Warnungen:
Code:
test.c: In function 'WinMain':
test.c:10:6: warning: variable 'rc' set but not used
test.c:17:1: warning: control reaches end of non-void function

Grüße, Matthias
 
Hab den Fehler gefunden, der Hinweis mit libwinsock gibts nicht hat mich drauf gebracht.
Ich hatte wohl aus der Version die ich zuerst runtergeladen hatte noch ein paar Libraries die nicht passten.
Alle entfernt, die Version aus deinem Link oben nochmal frisch installiert und alles läuft.
Herzlichen Dank für die Hilfe.
 
Zurück