Tôi có một dự án CMake đang sử dụng OpenMP và hoạt động trên Linux. Khi tôi biên dịch nó trên máy tính của mình, có vẻ như CMake gặp khó khăn trong việc tìm kiếm cờ openmp cho gcc của mingw.Sử dụng openmp trên windows với mingw. Không thể tìm thấy --ppread
Tôi quyết định thử một trường hợp thử nghiệm nhỏ hơn và chỉ cần biên dịch 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;
}
Sau đó, khi tôi cố gắng biên dịch
gcc -o OpenMPTest2 main_testomp.c -fopenmp
tôi nhận được
>>> 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
Tôi đã cố gắng tìm giải pháp trực tuyến và đã thử các biến thể của -lgomp, -lpthreadgc2 và -lpthreadvc2, không cải thiện.
Tôi đã tìm kiếm C của tôi: \ MinGW thư mục đệ quy cho bất kỳ tên tập tin chứa lpthread và nhận điều này:
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
Tôi không chắc chắn nếu tôi thiếu một lá cờ, hay một gói, hoặc những gì tôi m làm sai. Để có biện pháp tốt ở đây là đầu ra của 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)
Bất kỳ ý tưởng gì là sai?
Tôi có dòng đó trong CMakeLists.txt của mình, tôi không chắc chắn lý do tại sao nó sẽ không tìm thấy gói mặc dù. Tôi sẽ cung cấp cho mingw-w64 một cái nhìn mặc dù. Tôi có C: \ MinGW \ bin \ libgomp-1.dll. Tôi không nhìn thấy bất cứ điều gì khi tôi tìm kiếm hệ thống tập tin trong C: \ MinGW, và tôi không thấy bất cứ điều gì giống như nó trong cửa sổ mingw-get hoặc. Làm cách nào để cài đặt? – Erotemic
@Erotemic Tôi đã chỉnh sửa câu trả lời của tôi - điều đó có giúp ích gì không? – Patrick
Tôi đã thử toolchain, và thiết lập cmake_find_root_path, cả hai ý tưởng đều thất bại. Đường dẫn nên sử dụng đường dẫn kiểu cửa sổ và không nên có dấu ngoặc kép phải không? – Erotemic