【问题标题】:Unresolved external symbols in beginners CUDA program初学者 CUDA 程序中未解析的外部符号
【发布时间】:2011-01-04 22:12:34
【问题描述】:

我创建一个新的 Win32 控制台应用程序作为一个空项目 我正在使用 Visual Studio 2008 C++ 运行 Windows 7 64 位。我正在尝试从本文底部获取示例代码来构建:http://www.ddj.com/architect/207200659

我将 CUDA Build Rule v2.3.0 添加到项目的自定义构建规则中。它是可用规则文件列表中唯一带有复选框的东西

我在源文件(文件夹/过滤器???)中创建 moveArrays.cu

在该文件中,我添加以下代码:

// moveArrays.cu
//
// demonstrates CUDA interface to data allocation on device (GPU)
// and data movement between host (CPU) and device.

#include <stdio.h>
#include <assert.h>
#include <cuda.h>
int main(void)
{
   float *a_h, *b_h;     // pointers to host memory
   float *a_d, *b_d;     // pointers to device memory
   int N = 14;
   int i;
   // allocate arrays on host
   a_h = (float *)malloc(sizeof(float)*N);
   b_h = (float *)malloc(sizeof(float)*N);
   // allocate arrays on device
   cudaMalloc((void **) &a_d, sizeof(float)*N);
   cudaMalloc((void **) &b_d, sizeof(float)*N);
   // initialize host data
   for (i=0; i<N; i++) {
      a_h[i] = 10.f+i;
      b_h[i] = 0.f;
   }
   // send data from host to device: a_h to a_d 
   cudaMemcpy(a_d, a_h, sizeof(float)*N, cudaMemcpyHostToDevice);
   // copy data within device: a_d to b_d
   cudaMemcpy(b_d, a_d, sizeof(float)*N, cudaMemcpyDeviceToDevice);
   // retrieve data from device: b_d to b_h
   cudaMemcpy(b_h, b_d, sizeof(float)*N, cudaMemcpyDeviceToHost);
   // check result
   for (i=0; i<N; i++)
      assert(a_h[i] == b_h[i]);
   // cleanup
   free(a_h); free(b_h); 
   cudaFree(a_d); cudaFree(b_d);
}

构建时出现以下错误:

1>----- 构建开始:项目:CUDASandbox,配置:Debug x64 ------ 1>链接... 1>moveArrays.cu.obj:错误 LNK2019:函数 main 中引用的未解析外部符号 cudaFree 1>moveArrays.cu.obj:错误 LNK2019:函数 main 中引用的未解析的外部符号 cudaMemcpy 1>moveArrays.cu.obj:错误 LNK2019:函数 main 中引用的未解析的外部符号 cudaMalloc 1>moveArrays.cu.obj:错误 LNK2019:函数 __cudaUnregisterBinaryUtil 中引用的未解析外部符号 __cudaUnregisterFatBinary 1>moveArrays.cu.obj:错误 LNK2019:函数 __sti____cudaRegisterAll_45_tmpxft_00001264_00000000_6_moveArrays_cpp1_ii_main 中引用的未解析外部符号 __cudaRegisterFatBinary 1>D:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\x64\Debug\CUDASandbox.exe : 致命错误 LNK1120: 5 unresolved externals 1>构建日志保存在“file://d:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\CUDASandbox\x64\Debug\BuildLog.htm” 1>CUDASandbox - 6 个错误,0 个警告 ========== 构建:0 成功,1 失败,0 最新,0 跳过 ==========

我可以编译和运行 SDK 附带的示例 CUDA 程序。我知道我在这里遗漏了一些简单的东西,但它是什么?

【问题讨论】:

    标签: c++ visual-studio-2008 cuda


    【解决方案1】:

    在视觉工作室 2019 中:

    仔细检查 CUDA_PATH 环境变量的可用性。

    配置属性 -> VC++ 目录 -> 包含目录 -> 添加 $(CUDA_PATH)\include

    配置属性 -> VC++ 目录 -> 库目录 -> 添加 $(CUDA_PATH)\lib\x64

    配置属性 -> 链接器 -> 输入 -> 附加依赖项 -> 在 $(CUDA_PATH)\lib\x64 下添加 .lib 文件并忽略现有的 .lib 文件。

    【讨论】:

      【解决方案2】:

      需要两件事:

      1. 添加 CUDA 路径:
        转到:“配置属性->链接器->常规->附加库目录”并将$(CudaToolkitLibDir)添加到列表中。

      2. 添加 CUDA 运行时库:
        转到:“解决方案属性->链接器->输入->附加依赖项”并将cudart.lib添加到列表中。

      【讨论】:

        【解决方案3】:

        我猜你缺少链接到正确的库。 确保在“配置属性->链接器->输入”下添加了 CUDA 库。 参考this

        【讨论】:

        • 你是对的。我必须将“$(CUDA_LIB_PATH);../../common/lib”添加到配置属性->链接器->常规->附加库目录和“cudart.lib”到配置属性->链接器->输入- >其他依赖项
        • 我之前创建了我的项目,当时我想把它变成一个 CUDA 程序并添加一个.cu 文件。不管我在“项目-> 构建自定义”中选择了 Cuda 5.5,您所引用的正确库,cudart.lib 在“配置属性-> 链接器-> 输入-> 其他依赖项”中都找不到,但 $(CudaToolkitLibDir)在“配置属性->链接器->常规->附加库目录”中找到。
        • 我迟到了大约 6 年,但这个链接似乎不再起作用了。
        猜你喜欢
        • 1970-01-01
        • 2021-09-24
        • 2013-10-05
        • 2012-12-13
        • 2018-03-30
        • 2020-06-28
        • 2011-02-09
        相关资源
        最近更新 更多