相关疑难解决方法(0)

如何在CMake的try_compile函数中为OpenMP设置链接器标志

我想验证当前编译器是否可以使用openmp支持构建.该应用程序已经部署在各种各样的unix系统上,其中一些可能有旧版本的OpenMP,我想测试重要的OpenMP功能.所以,我想构建一个包含一些OpenMP调用的测试源文件.

因此,我创建了一个非常简单的测试文件,并尝试使用CMake的try_compile函数.遗憾的是,它似乎没有正确应用-fopenmp链接器标志.有谁知道如何强制链接器标志或查看链接器标志是否被应用于任何地方?

来自CMakeLists.txt

try_compile(
    HAVE_OPENMP
    ${APBS_ROOT}/src/config
    ${APBS_ROOT}/src/config/omp_test.c
    CMAKE_FLAGS "-DCMAKE_C_FLAGS=-fopenmp -DCMAKE_EXE_LINKER_FLAGS=-fopenmp"
    OUTPUT_VARIABLE TRY_COMPILE_OUTPUT
    )
Run Code Online (Sandbox Code Playgroud)

来自omp_test.c

#include <stdio.h>
#include <omp.h>

int main()
{
    int i;
    int threadID = 0;
    #pragma omp parallel for private(i, threadID)
    for(i = 0; i < 16; i++ )
    {
        threadID = omp_get_thread_num();
        #pragma omp critical
        {
            printf("Thread %d reporting\n", threadID);
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果输出是

Change Dir: src/config/CMakeFiles/CMakeTmp

Run Build Command:/usr/bin/make "cmTryCompileExec/fast"
/usr/bin/make -f CMakeFiles/cmTryCompileExec.dir/build.make CMakeFiles/cmTryCompileExec.dir/build
make[1]: Entering directory `src/config/CMakeFiles/CMakeTmp'
/usr/bin/cmake -E cmake_progress_report /data/work/source/apbs/src/config/CMakeFiles/CMakeTmp/CMakeFiles 1
Building …
Run Code Online (Sandbox Code Playgroud)

cmake openmp

48
推荐指数
4
解决办法
5万
查看次数

对"omp_get_max_threads_"的未定义引用

我在尝试编译项目时遇到以下错误:( fortran,使用gfortran)

未定义的引用`omp_get_max_threads_'

未定义的引用`omp_get_thread_num_'

问题是,我的GCC版本是4.4.3,这是为了支持OpenMP.

gcc openmp gfortran

37
推荐指数
2
解决办法
7万
查看次数

标签 统计

openmp ×2

cmake ×1

gcc ×1

gfortran ×1