Wie kompilieren Sie statische pthread-win32 lib für x64?
Frage
Es sieht aus wie einige Arbeit mit x64 Arbeit zu machen pthread-win32 getan wurde, aber es gibt keine Build-Anweisungen. Ich habe versucht, simly mit dem Visual Studio Gebäude x64 Kreuze Tools-Eingabeaufforderung, aber wenn ich versuche, in das lib von einer x64-Anwendung zu verknüpfen, kann keine der Funktion Exporte sehen. Es scheint, wie es ist immer noch die lib als x86 oder etwas zu kompilieren.
Ich habe sogar versucht, das Hinzufügen / MACHINE zur Make-Datei an den entsprechenden Stellen, aber es hilft nicht. Hat jemand bekommt das? Arbeitet
Lösung 2
Bis es offiziell freigegeben ist, sieht es aus wie Sie den CVS-Kopf überprüfen müssen auf die Version 2.9 der Bibliothek zu erhalten. Version 2.9 hat alle x64-Patches, aber Sie werden immer noch Probleme haben, wenn Sie versuchen, die statische Bibliothek von der Kommandozeile zu kompilieren.
Die einzige Abhilfe, die ich kenne, ist den DLLs zu verwenden, anstatt statisch die LIB verbinden.
Andere Tipps
Für mich ich gerade verwende 64-Bit-Windows-Compiler (mingw-w64 Cross-Compiler in diesem speziellen Fall), dann machen (with2.9.1) wie:
$ make clean GC-static
Dann, wie ich es für die Verwendung installieren (einige dies nicht erforderlich sein, natürlich),
cp libpthreadGC2.a $mingw_w64_x86_64_prefix/lib/libpthread.a
cp pthread.h sched.h semaphore.h $mingw_w64_x86_64_prefix/include
dann, es zu benutzen, müssen Sie diese (zB ffmpeg Konfigurationszeile, es zu benutzen) definieren:
--extra-cflags=-DPTW32_STATIC_LIB
Wie auch immer, das ist ein Weg.
Eine andere Möglichkeit ist, das gleiche zu tun, dann die * .h-Dateien ändern und alle Verweise entfernen Header Dllexport (oder manuell DPTW32_STATIC_LIB in den Header definieren).
ex:
sed 's/ __declspec (dllexport)//g;s/ __declspec (dllimport)//g'
(ref: zeranoe Build-Skripte)
Hier ist, wie ich es tat (VS2015). Sollte auch für ältere von Visual Studios arbeiten.
1) Laden Sie die Release .zip von Source
2) Entpacken Sie auf eine saubere Ordner- sollte „pthreads.2“
sehen
3) Öffnen Sie Ihre Visual Studio-Eingabeaufforderung, navigieren Sie zu „pthreads.2.“
4) Run "nmake", keine Argumente. Es erzeugt eine Hilfemeldung alle rechtlichen Befehle Auflistung können Sie ‚nmake‘ geben, es zu bauen. Weitere Informationen finden Sie unter „pthreads.2 \ FAQ“ Datei, die ihre 3 unterschiedliche Aromen der ‚Bereinigung‘ Handhabung erklärt.
Ich würde vorschlagen, Gebäude „VC“ und „VC-debug“ (und vielleicht auch die statisch diejenigen, von denen) nur. Der ‚echte‘ pthreads ist eine C-Systembibliothek auf POSIX-Plattformen wie Linux, so wird nur die Kombinationen werden Ihnen genau die gleiche C Fehlerverhalten auf Windows geben, die Sie auf Linux bekommen würden, FreeBSD, usw.
Diese Meldung helfen könnte.
erweitern kgriffs beantwortet eine zwei Dinge zu tun hat, um tatsächlich ein 64-Bit-DLL zu bauen und nicht die 32-Bit-DLL.
Erstes Download neueste pThreads über CVS (wie vorgeschlagen hier )
1) verwenden 64-Bit-Build-Tools - erreicht durch eine korrekte VC Umgebungseinstellungen in der Befehlszeile (weitere Informationen Laden hier ):
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat amd64
(ändern Sie die 11,0 bis was auch immer Version Sie verwenden)
2) Wie es in der pThreads Makefile geschrieben:
TARGET_CPU ist eine Umgebungsvariable von Visual Studio-Eingabeaufforderung eingestellt wie durch das SDK (VS 2010 Express Plus SDK 7.1) zur Verfügung gestellt PLATFORM ist eine Umgebungsvariable, die in dem VS 2013 Express x64 Quer eingestellt werden können Entwicklungsumgebung
Das bedeutet, dass, wenn sie nicht durch die vcvars (in meinem Fall war es nicht) getan wurde, um Sie TARGET_CPU oder PLATFORM gesetzt (nur für den Fall setze ich sie beide):
set TARGET_CPU=x64
set PLATFORM=x64
3) und nun den letzten Schritt:
nmake clean VC
nmake clean VC-debug
Dies wird eine 64-Bit-DLL-Dateien (und richtige Import-Bibliothek und PDB) machen. Ich kann bestätigen, dass es mit Visual Studio 2012 funktioniert.