Je voudrais lier statiquement "pthreads pour Win32" avec mon application, compilé avec MinGW32 afin que l'application n'ait pas besoin de pthreadGC2.dll pour fonctionner.pthreads liaison statique avec MinGW
J'utilise la dernière version de pthreads - 2.9.1, téléchargée à partir de here et les fichiers include et lib sont copiés dans la librairie MinGW et incluent les répertoires. Lorsque je cherchais sur le Web comment faire cela, je suis tombé sur this thread qui demande l'utilisation des drapeaux -static-libgcc -static-libstdC++. Cela ne fonctionne pas, ce qui signifie que l'application compile mais ne peut pas fonctionner sans pthreadGC2.dll présent.
Ils recommandent également d'utiliser -static -static-libgcc -static-libstdC++. Cela ne compile pas avec l'erreur suivante:
main.o:main.cpp:(.text+0x461): undefined reference to `_imp__pthread_create'
main.o:main.cpp:(.text+0x4be): undefined reference to `_imp__pthread_join'
Est-ce que quelqu'un sait comment faire cela? Par ailleurs - coping pthreadGC2.dll téléchargé à partir de la version 2.9.1 (à l'intérieur de pthreads-w32-2.9.1-1-mingw32-dll.tar.lzma) dans le dossier de l'application ne suffit pas. Pour lancer l'application, je devrais également copier une autre DLL: libgcc_s_dw2-1.dll. Ceci est vraiment mauvais pour moi - je ne voudrais pas faire mes utilisateurs ont ces 2 DLLs chaque fois qu'ils veulent exécuter mon application
Voici mon code:
#include <stdio.h>
#include <pthread.h>
static void* threadMain(void* param)
{
printf("thread start\n");
for (int i = 0; i < 2; i++)
Sleep(1);
printf("thread end\n");
return NULL;
}
int main(int argc, char* argv[])
{
pthread_t thread;
int err = pthread_create(&thread, NULL, threadMain, NULL);
if (err != 0)
{
printf("Cannot create thread: %s", strerror(err));
return;
}
printf("thread created\n");
Sleep(1);
pthread_join(thread, NULL);
printf("thread joined\n");
}
et mon makefile:
all:
g++.exe -DHAVE_STRUCT_TIMESPEC -c -o main.o main.cpp
g++.exe -static-libgcc -static-libstdc++ -o link_pthreads.exe main.o -lpthread
clean:
del main.o
del link_pthreads.exe
MinGW envisager d'utiliser -w64, il est livré avec pthreads intégré –
C'est un problème pour moi car mon application a d'autres problèmes de compilation avec mingw-64. Donc, j'ai vraiment besoin de mingw-32 – fx23
peut-être travailler sur la résolution de ces problèmes - mingw est défunte –