1
数学库
标题
2024-11-06 16:30:30
34

问题:
使用dtk的docker容器编译代码,主程序链接时报错 “ lld: error: target emulation unknown: -m or at least one .o file required ”

环境:
容器镜像:image.sourcefind.cn:5000/dcu/admin/base/dtk:24.04.2-ubuntu22.04-py3.10
主机:主机没有dcu,也没有安装驱动

项目结构:
main // 可执行程序,没有hip代码
+----> lib1.a // 有hip代码
+----> lib2.a // 有hip代码
+----> lib3.a // 没有hip代码

编译系统使用cmake,但没有用 enable_language(HIP) 特性。而是通过给cmake指定toolchain来指定 CXX 编译器为 hipcc。lib1、lib2 的编译参数有 -fgpu-rdc,main的链接参数也指定了 -fgpu-rdc。

代码在rocm-6.2.3 环境下可以编译通过,且可以在 A 卡上正常执行。

这个链接错误是什么原因?

 

vdcu
全部评论(3)
只看楼主
4
4night
楼主
3楼

运行报错的原因是设备代码没有链接到主程序。在文档和社区找了一圈,也没有找到解决方法。最后联系了官方的技术支持,给了以下链接参数,问题得以解决。

-Xoffload-linker --whole-archive
2025/2/13
4
4night
楼主
2楼
编译成功了,在dcu环境下运行报错,错误信息是说找不到某个核函数。
2024/11/28
4
4night
楼主
1楼

解决了。

问题出在了编译时指定了 --offload-arch,链接的时候没有指定 --offload-arch,编译器就用了其缺省值,这个跟编译时指定的不一致导致链接报错。我编译时指定的是 gfx906,链接的时候有 gfx906 gfx908。

在 rocm 环境下成功的原因是,编译时指定的 --offload-arch 就是编译主机上安装的 A 卡的 arch,所以链接的时候缺省找到的应该也是同一个 arch,就没有报错。
2024/11/7
没有更多内容了
--
楼主
Level.3
0 帖子
楼主热帖
暂无数据