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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top