运行 make 命令时出现“对'GOACC_parallel_keyed'的未定义引用”和相关错误

"undefined reference to `GOACC_parallel_keyed' " and related errors coming up while running make command

提问人:Flerovium 114 提问时间:8/19/2023 最后编辑:Vladimir F Героям славаFlerovium 114 更新时间:8/30/2023 访问量:62

问:

我正在从事一个项目,我必须优化计算流体动力学求解器的性能。我们的目标是使用 OpenACC 来做到这一点。求解器是使用 fortran90 编写的,并通过 linux 系统中的终端运行。里面有很多目录,如build,bin,cmake,src等。我首先将 OPENACC 指令添加到每个源文件,并尝试使用构建目录中的 make 命令进行编译,但我遇到了一些错误。

我附上了编译器输出的一部分的屏幕截图。显示错误的编译器输出的 SS

fortran linker-errors openacc

评论

0赞 Vladimir F Героям слава 8/21/2023
不要将屏幕截图用于错误消息。这非常重要。请将您的错误消息复制并粘贴为文本。它们必须可以被有类似问题的人搜索到。另请参阅如何提问
0赞 Vladimir F Героям слава 8/21/2023
此外,对于 Fortran 问题,请使用标签 fortran。检查要添加的标签的简短说明。
0赞 Vladimir F Героям слава 8/21/2023
需要更多的信息。您似乎正在使用 CMake。您的 CMake 配置是必需的。另外,使用 .请参阅 stackoverflow.com/questions/2670121/...VERBOSE=1
0赞 Flerovium 114 8/21/2023
亲爱的弗拉德米尔,感谢您的指导。我将相应地编辑我的问题。
1赞 francescalus 8/22/2023
是的,请不要将屏幕截图用于代码或错误。但一定要注意,“SS”不是用来代替“屏幕截图”一词的良好字母组合。

答:

0赞 tschwinge 8/30/2023 #1

使用 GCC 时,您会收到以下错误:

test.o: In function `main':
test.c:(.text.startup+0x3c): undefined reference to `GOACC_parallel_keyed'
/tmp/cc8C7CVO.crtoffloadtable.o:(.rodata+0x0): undefined reference to `__offload_func_table'
/tmp/cc8C7CVO.crtoffloadtable.o:(.rodata+0x8): undefined reference to `__offload_funcs_end'
/tmp/cc8C7CVO.crtoffloadtable.o:(.rodata+0x10): undefined reference to `__offload_var_table'
/tmp/cc8C7CVO.crtoffloadtable.o:(.rodata+0x18): undefined reference to `__offload_vars_end'
/tmp/cc0n3gC3.target.o: In function `init':
cc89TnMy.c:(.text+0x19): undefined reference to `GOMP_offload_register_ver'
/tmp/cc0n3gC3.target.o: In function `fini':
cc89TnMy.c:(.text+0x39): undefined reference to `GOMP_offload_unregister_ver'
collect2: error: ld returned 1 exit status

...如果使用 进行编译,但在调用 GCC 进行链接时不指定后一个标志。(我想构建系统不是直接调用,而是通过 GCC 链接。因此,请确保在链接时也处于活动状态。-fopenaccld-fopenacc