Come si compila la libreria statica pthread-win32 per x64?
Domanda
Sembra che sia stato fatto del lavoro per far funzionare pthread-win32 con x64, ma non ci sono istruzioni per la compilazione. Ho provato semplicemente a compilare con il prompt dei comandi di Visual Studio x64 Cross Tools, ma quando provo a collegarmi alla lib da un'applicazione x64, non riesco a vedere nessuna delle funzioni di esportazione. Sembra che stia ancora compilando la lib come x86 o qualcosa del genere.
Ho anche provato ad aggiungere / MACHINE al makefile nei posti appropriati, ma non aiuta. Qualcuno l'ha fatto funzionare?
Soluzione 2
Fino a quando non sarà rilasciato ufficialmente, sembra che devi controllare la testa CVS per ottenere la versione 2.9 della libreria. La versione 2.9 ha tutte le patch x64, ma avrai ancora problemi se provi a compilare la libreria statica dalla riga di comando.
L'unica soluzione alternativa che conosco è utilizzare le DLL invece di collegare staticamente il LIB.
Altri suggerimenti
Per me, uso solo un compilatore di Windows a 64 bit (mingw-w64 cross-compilatore in questo caso particolare) quindi faccio (con2.9.1) come:
$ make clean GC-static
Quindi come lo installo per l'uso (alcuni di questi potrebbero non essere necessari, ovviamente),
cp libpthreadGC2.a $mingw_w64_x86_64_prefix/lib/libpthread.a
cp pthread.h sched.h semaphore.h $mingw_w64_x86_64_prefix/include
quindi per usarlo, devi definirlo (esempio ffmpeg configura la linea per usarlo):
--extra-cflags=-DPTW32_STATIC_LIB
Comunque è un modo.
Un altro modo è fare lo stesso, quindi modificare i file * .h e rimuovere tutti i riferimenti a dllexport dalle intestazioni (o definire manualmente DPTW32_STATIC_LIB nelle intestazioni).
es:
sed 's/ __declspec (dllexport)//g;s/ __declspec (dllimport)//g'
(ref: zeranoe build script)
Ecco come l'ho fatto (VS2015). Dovrebbe funzionare anche per i più vecchi Visual Studios.
1) Scarica la versione .zip da SourceForge
2) Disimballare in una cartella pulita- dovrebbe vedere " pthreads.2 "
3) Apri il prompt dei comandi di Visual Studio, vai a " pthreads.2. & Quot;
4) Esegui " nmake " ;, nessun argomento. Produce un messaggio di aiuto che elenca tutti i comandi legali che puoi dare a 'nmake' per costruirlo. Per maggiori informazioni, vedi " pthreads.2 \ FAQ " file che spiega i loro 3 diversi tipi di gestione 'cleanup'.
Suggerirei di costruire "VC" e "quot-VC-debug" (e forse quelli statici di quelli) solo. Il "vero" pthreads è una libreria di sistema C su piattaforme POSIX come Linux, quindi solo quelle combo ti daranno lo stesso comportamento di errore C su Windows che avresti su Linux, FreeBSD, ecc.
Questo messaggio potrebbe aiutare.
per espandere la risposta di kgriffs bisogna fare altre due cose per costruire effettivamente una DLL a 64 bit e non a 32 bit.
Prima scarica gli ultimi pthreads tramite CVS (come suggerito qui )
1) usa gli strumenti di compilazione a 64 bit - ottenuti caricando le impostazioni corrette dell'ambiente VC nella riga di comando (ulteriori informazioni qui ):
C: \ Programmi (x86) \ Microsoft Visual Studio 11.0 \ VC \ vcvarsall.bat amd64
(cambia la 11.0 in qualunque versione tu stia usando)
2) Come è scritto nel Makefile di pthreads:
TARGET_CPU è una variabile d'ambiente impostata dal prompt dei comandi di Visual Studio come fornito dall'SDK (VS 2010 Express plus SDK 7.1) PIATTAFORMA è una variabile d'ambiente che può essere impostata nella croce x64 di VS 2013 Express ambiente di sviluppo
il che significa che se non è stato fatto dai vcvars (nel mio caso non lo era) è necessario impostare TARGET_CPU o PLATFORM (nel caso in cui li abbia impostati entrambi):
imposta TARGET_CPU = x64
set PLATFORM = x64
3) e ora il passaggio finale:
nmake clean VC
nmake clean VC-debug
questo creerà un file DLL a 64 bit (e una corretta libreria di importazione e PDB). Posso verificare che funzioni con Visual Studio 2012.