Mam projekt CMake, który używa OpenMP i działa na Linuksie. Kiedy poszedłem skompilować go na moim komputerze z systemem Windows wyglądało na to, że CMake miał problem ze znalezieniem flag openmp dla gcc mingw.Używanie openmp w oknach z mingw. Nie mogę znaleźć -lpthread
postanowiłem spróbować mniejszy przypadek testowy i po prostu skompilować 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;
}
Następnie przy próbie kompilacji
gcc -o OpenMPTest2 main_testomp.c -fopenmp
uzyskać
>>> 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
próbowałem znaleźć rozwiązanie online i wypróbować warianty -lgomp, -lpthreadgc2 i -lpthreadvc2, bez żadnej poprawy.
Szukałem mojego katalogu C: \ MinGW rekurencyjnie za jakiekolwiek nazwach zawierających lpthread i dostał to:
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
Nie jestem pewien, czy jestem brakuje flagę lub pakiet, albo co ja” M robię źle. Na dobrą sprawę tutaj jest wyjście 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)
Każdy pomysł, co jest nie tak?
Mam tę linię w moim CMakeLists.txt, nie jestem pewien, dlaczego nie znalazłaby pakietów. Dam ci jednak mingw-w64. Mam C: \ MinGW \ bin \ libgomp-1.dll. Nie widzę niczego, gdy szukam systemu plików w C: \ MinGW, i nie widzę czegoś podobnego w oknie mingw-get. Jak mogę to zainstalować? – Erotemic
@Erotemic Edytowałem swoją odpowiedź - czy to pomaga? – Patrick
Wypróbowałem toolchain i ustawiłem cmake_find_root_path, obie koncepcje zawiodły. Ścieżka powinna używać ścieżek w stylu Windows i nie powinna być cytowana? – Erotemic