将OpenMP指定为GCC

| 对于OpenMP,当我的代码使用其API中的函数(例如omp_get_thread_num())而不使用其指令(例如那些#pragma omp ...)时, 为什么直接将libgomp.a指定为 gcc而不是使用-fopenmp 不起作用,例如
gcc hello.c /usr/lib/gcc/i686-linux-gnu/4.4/libgomp.a  -o hello
更新:我刚刚发现链接到libgomp.a不起作用,但是链接到libgomp.so可以工作。这是否意味着OpenMP无法静态链接? 为什么-fopenmp仅在没有 指定库文件
gcc hello.c -fopenmp -o hello
更新:换句话说,当使用-fopenmp时,为什么不需要显式链接到libgomp.so? 为什么还会编译:
gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o hello
这会忽略OpenMP指令吗 在代码中是否有? 谢谢并恭祝安康!     
已邀请:
        通常,请记住,指令和功能是不同的;前者由
-fopenmp
控制,后者由链接到OpenMP库控制。 (已更新以包含注释)尝试使用
-fopenmp
-static
选项静态链接OpenMP。因为这意味着
-lgomp -lrt
,所以除非您还指定
librt.a
的位置,否则以下命令将无法正确编译。
gcc hello.c /usr/lib/gcc/i686-linux-gnu/4.4/libgomp.a  -o hello
(已更新以包含注释)我想以下命令正在正确编译,因为OpenMP库已经在您的库路径中,并且系统的动态链接器已自动与
libgomp.so
链接。
gcc hello.c -fopenmp -o hello
以下命令可能已正确编译,因为它已链接到OpenMP的共享库(the9ѭ)。请注意,未使用“ 5”选项。
gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o hello
如果未指定
-fopenmp
选项,则应忽略OpenMP指令。     

要回复问题请先登录注册