指定OpenMP到GCC

时间:2011-06-15 01:17:45

标签: c gcc openmp

对于OpenMP,当我的代码使用其API中的函数(例如,omp_get_thread_num())而不使用其指令(例如#pragma omp ...)时,

  1. 为什么直接指定libgomp.a gcc而不是使用-fopenmp 不起作用,例如

    gcc hello.c /usr/lib/gcc/i686-linux-gnu/4.4/libgomp.a  -o hello
    

    更新:我刚刚发现链接到libgomp.a不起作用,但链接到libgomp.so有效。这是否意味着OpenMP不能静态链接?

  2. 为什么-fopenmp只能在没有的情况下工作 指定库文件

    gcc hello.c -fopenmp -o hello
    

    更新:换句话说,使用-fopenmp时,为什么不需要显式链接到libgomp.so?

  3. 为什么还要编译:

    gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o hello
    

    这会忽略OpenMP指令吗? 在代码中是否有?

  4. 谢谢和问候!

1 个答案:

答案 0 :(得分:25)

一般来说,请记住指令和功能是不同的东西;前者由-fopenmp控制,后者由链接到OpenMP库控制。

  1. 已更新以合并评论)尝试使用-fopenmp-static选项静态链接OpenMP。因为这意味着-lgomp -lrt,除非您还指定librt.a的位置,否则以下命令将无法正确编译。

    gcc hello.c /usr/lib/gcc/i686-linux-gnu/4.4/libgomp.a  -o hello
    
  2. 更新以合并注释)我认为以下命令正在正确编译,因为OpenMP库已经在您的库路径中,并且您的系统的动态链接器正在自动链接{{1 }}

    libgomp.so
  3. 以下命令可能正在正确编译,因为它链接到OpenMP的共享对象(gcc hello.c -fopenmp -o hello )。请注意,libgomp.so选项未使用

    -static

    如果未指定gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o hello 选项,则应忽略OpenMP指令。