我有一个使用OpenMP的CMake项目,可以在Linux上运行。但是当我尝试在Windows机器上编译它时,CMake似乎无法找到mingw's gcc的openmp标志。
我决定尝试一个更小的测试案例,只编译main_openmp.c文件。
然后,当我尝试编译时。
有什么想法是出了什么问题?
我决定尝试一个更小的测试案例,只编译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;
}
然后,当我尝试编译时。
gcc -o OpenMPTest2 main_testomp.c -fopenmp
我理解
>>> 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
我试图在网上找到解决方案,并尝试使用-lgomp、-lpthreadgc2和-lpthreadvc2的变体,但没有改善。
我递归地搜索了我的C:\MinGw目录,查找任何包含lpthread的文件名,结果如下:
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
我不确定是否缺少标志、包或者我做错了什么。为了保险起见,这里是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)
有什么想法是出了什么问题?
CMAKE_FIND_ROOT_PATH
而不是cmake_find_root_path
,对吗? 在cmake中,变量名区分大小写。 - Patrick