En utilisant openmp sur windows avec mingw. Ne trouvez -lpthread
J'ai un CMake projet qui consiste à utiliser OpenMP et fonctionne sur linux.
Quand je suis allé à compiler sur ma machine windows, il ressemblait à CMake avait de la difficulté à trouver le openmp drapeaux pour de mingw gcc.
J'ai décidé d'essayer un petit test et seulement compiler main_openmp.c
#include <omp.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
int id;
#pragma omp parallel private(id)
{
id = omp_get_thread_num();
printf("%d: Hello World!\n", id);
}
return 0;
}
Puis quand j'essaie de compiler
gcc -o OpenMPTest2 main_testomp.c -fopenmp
- Je obtenir
>>> gcc -o OpenMPTest2 main_testomp.c -fopenmp
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lpthread
collect2.exe: error: ld returned 1 exit status
J'ai tenté de trouver la solution en ligne et essayé des variantes de lgomp, -lpthreadgc2, et -lpthreadvc2, sans aucune amélioration.
J'ai cherché ma C:\MinGw répertoire de façon récursive pour tout les fichiers contenant des lpthread et obtenu ceci:
C:\MinGW\bin\pthreadgc2.dll
C:\MinGW\bin\pthreadgce2.dll
C:\MinGW\var\cache\mingw-get\packages\pthreads-w32-2.9.1-1-mingw32-dll.tar.lzma
C:\MinGW\var\lib\mingw-get\data\mingw32-pthreads-w32.xml
Je ne suis pas sûr si je suis absent un drapeau, ou un paquet, ou ce que je fais mal. Pour faire bonne mesure, voici la sortie de gcc-v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.8.1/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.8.1/configure --prefix=/mingw --host=mingw32 --build=mingw32 --without-pic
--enable-shared --enable-static --with-gnu-ld --enable-lto --enable-libssp --disable-multilib --ena
ble-languages=c,c++,fortran,objc,obj-c++,ada --disable-sjlj-exceptions --with-dwarf2 --disable-win32
-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --with-gmp=/usr/src/pkg/gm
p-5.1.2-1-mingw32-src/bld --with-mpc=/usr/src/pkg/mpc-1.0.1-1-mingw32-src/bld --with-mpfr= --with-sy
stem-zlib --with-gnu-as --enable-decimal-float=yes --enable-libgomp --enable-threads --with-libiconv
-prefix=/mingw32 --with-libintl-prefix=/mingw --disable-bootstrap LDFLAGS=-s CFLAGS=-D_USE_32BIT_TIM
E_T
Thread model: win32
gcc version 4.8.1 (GCC)
Aucune idée de quel est le problème?
OriginalL'auteur Erotemic | 2014-05-09
Vous devez vous connecter pour publier un commentaire.
J'ai enfin réussi à obtenir des choses de travail.
D'abord, en utilisant mingw-get, j'ai installé mingw32-pthreads-w32
Cela m'a permis d'utiliser l'-fopenmp drapeau avec gcc.
Mais lors de l'utilisation de CMake j'ai dû inclure les lignes:
comme d'habitude, mais je devais aussi m'assurer que j'avais le OpenMP_CXX_FLAGS dans mon target_link_libraries commande
OriginalL'auteur Erotemic
Dans votre
CMakeLists.txt
fichier, vous devez utiliser la syntaxe suivante:Si vous obtenez une erreur lors de la configuration de cmake, alors cela signifie que vous n'avez pas les bibliothèques nécessaires, ou au moins cmake ne pouvez pas les trouver. Si vous avez les bibliothèques et cmake ne pouvez pas les trouver, alors assurez-vous de la trouver le chemin d'accès est défini:
Vous voudrez peut-être essayer de créer une "chaîne" fichier comme décrit ici.
Je voudrais aussi vous suggère de l'essayer mingw-w64 pour cross-compiler pour Windows. Je l'utilise avec succès pour les deux versions 32 bits et 64 bits des applications. J'utilise mingw[32/64]-cmake, et ensuite, tout fonctionne, tout simplement.
Je suis sous Fedora 19 et 20, et certains paquets pertinents à votre question, (32-bit):
J'ai édité ma réponse -- t-il m'aider?
J'ai essayé l'ensemble des outils, et le réglage de la cmake_find_root_path, les deux idées échoué. Le chemin doit être à l'aide de windows style chemins et ne devrait pas être entre guillemets droit?
cmake poignées barres obliques sur Windows, et je ne pense pas que vous avez besoin de devis pour le réglage de la chemin de la racine (l'exemple dans le lien ne fonctionne pas, utilisez les guillemets). Vous avez défini
CMAKE_FIND_ROOT_PATH
pascmake_find_root_path
, droit? Les noms de variables sont sensibles à la casse dans cmake.oui j'ai utilisé le allcaps variable dans le script. Je n'ai pas eu le temps de regarder dans mingw-w64, mais je vais vous laisser savoir comment ça se passe quand je fais les.
OriginalL'auteur Patrick
Étapes très simples qui a fonctionné pour moi:
OriginalL'auteur Theja