You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

链接CUDA设备函数时遇test42未解析外部函数错误求助

问题原因与解决方法

你的错误出在最后一步编译命令中,直接使用a.cu会让nvcc重新编译a.cu的设备代码,此时编译器无法找到test42的定义(因为这一步没有关联b.fatbin),导致ptxas报错。正确的做法是先将a.cu编译为目标文件,再和设备链接后的c.o一起生成可执行文件。

正确操作步骤

  1. 编译b.cu为fatbin文件(这一步你已完成,确认命令正确):

    nvcc -arch=sm_60 -fatbin -o somepath/b.fatbin b.cu
    
  2. 将a.cu编译为目标文件(仅编译不链接):

    nvcc -arch=sm_60 -c -o a.o a.cu
    
  3. 执行设备链接,将a的目标文件和b的fatbin合并为设备链接目标文件:

    nvcc -arch=sm_60 -dlink -o c.o a.o somepath/b.fatbin -lcudadevrt
    
  4. 最后链接所有目标文件生成可执行程序:

    nvcc -arch=sm_60 -o executable a.o c.o -lcudadevrt
    

关键说明

  • 直接在最后一步用a.cu而非a.o时,nvcc会重新处理a.cu的设备代码,此时没有引入b.fatbin,自然找不到test42的定义。
  • -dlink步骤必须包含a的目标文件,因为需要解析get42对test42的调用,将两个设备代码链接起来。

内容的提问来源于stack exchange,提问作者James Toaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:24:58