【问题标题】:VISUAL STUDIO 2013 : error LNK2019: unresolved external symbol - cuRAND - Random Number GeneratorVISUAL STUDIO 2013:错误 LNK2019:未解析的外部符号 - cuRAND - 随机数生成器
【发布时间】:2015-09-01 02:03:11
【问题描述】:

我研究了几个小时,

  1. MSDN Microsoft - Linker Tools Error LNK2019
  2. How to solve the error LNK2019: unresolved external symbol - function?
  3. What is an undefined reference/unresolved external symbol error and how do I fix it?
  4. Error LNK2019: unresolved external symbol _wWinMain@16 referenced in function ___tmainCRTStartup
  5. How to get rid of this error: "MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup"

    但还没有找到解决以下错误的方法,

Error	1	error LNK2019: unresolved external symbol _curandCreateGenerator@8 referenced in function _GPU_RNG	F:\New\Eks\Visual Studio 2013\PEOPLE PROJECTS\RNGTests\CURANDRNGLib\CURANDRNG.cu.obj	CURANDRNGLib
Error	2	error LNK2019: unresolved external symbol _curandCreateGeneratorHost@8 referenced in function _CPU_RNG	F:\New\Eks\Visual Studio 2013\PEOPLE PROJECTS\RNGTests\CURANDRNGLib\CURANDRNG.cu.obj	CURANDRNGLib
Error	3	error LNK2019: unresolved external symbol _curandDestroyGenerator@4 referenced in function _GPU_RNG	F:\New\Eks\Visual Studio 2013\PEOPLE PROJECTS\RNGTests\CURANDRNGLib\CURANDRNG.cu.obj	CURANDRNGLib
Error	4	error LNK2019: unresolved external symbol _curandSetPseudoRandomGeneratorSeed@12 referenced in function _GPU_RNG	F:\New\Eks\Visual Studio 2013\PEOPLE PROJECTS\RNGTests\CURANDRNGLib\CURANDRNG.cu.obj	CURANDRNGLib
Error	5	error LNK2019: unresolved external symbol _curandGenerateUniform@12 referenced in function _GPU_RNG	F:\New\Eks\Visual Studio 2013\PEOPLE PROJECTS\RNGTests\CURANDRNGLib\CURANDRNG.cu.obj	CURANDRNGLib

CURANDRNGLib.cu

#include <cuda.h>
#include <cuda_runtime.h>
#include <curand.h>
#include <curand_kernel.h>

using namespace std;
extern "C" __declspec(dllexport) void __cdecl GPU_RNG(float* , unsigned int , unsigned int);
extern "C" __declspec(dllexport) void __cdecl CPU_RNG(float* , unsigned int , unsigned int);


extern void GPU_RNG(float * h_randomData, unsigned int dataCount, unsigned int mainSeed)
{
	float * d_randomData = 0;

	//allocate device memory
	size_t randomDataSize = dataCount * sizeof(float);
	cudaMalloc((void**)&d_randomData, randomDataSize);

	curandGenerator_t m_prng;
	//Create a new generator
	curandCreateGenerator(&m_prng, CURAND_RNG_PSEUDO_DEFAULT);
	//Set the generator options
	curandSetPseudoRandomGeneratorSeed(m_prng, (unsigned long) mainSeed);
	//Generate random numbers
	curandGenerateUniform(m_prng, d_randomData, dataCount);
	//Copy memory back to the device
	cudaMemcpy(h_randomData, d_randomData, randomDataSize, cudaMemcpyDeviceToHost);
	//Clean
	curandDestroyGenerator(m_prng);
	//free device memory
	cudaFree(d_randomData);
}

extern void CPU_RNG(float * h_randomData, unsigned int dataCount, unsigned int mainSeed)
{
	curandGenerator_t m_prng;
	//Create a new generator
	curandCreateGeneratorHost(&m_prng,CURAND_RNG_PSEUDO_DEFAULT);
	//Set the generator options
	curandSetPseudoRandomGeneratorSeed(m_prng, (unsigned long) mainSeed);
	//Generate random numbers
	curandGenerateUniform(m_prng, h_randomData, dataCount);
	//Clean
	curandDestroyGenerator(m_prng);
}

我应该添加#include 吗? (我英语不太好)

【问题讨论】:

  • 您能构建任何使用 CURAND 的 CUDA 示例项目吗?如果是这样,您可以研究这些以了解正确的项目设置。
  • @Robert 是的,我可以。
  • 这些项目具有使用 CURAND 所需的所有设置,而不会出现未定义的参考错误。
  • 这意味着您应该能够研究这些项目(或者只是重复使用其中一个)并解决您的问题。 AFAIK 这些项目都没有创建 dll,但这是一个单独的问题,大概你已经弄清楚了(你似乎没有在这里问这个问题)。
  • @Robert 我知道了。

标签: c++ visual-studio cuda


【解决方案1】:

我猜你可能已经在 Win32 平台上开发了你的代码。 Win32 上只有基本的 CUDA API 支持,但没有 CURAND 库支持。您可以尝试切换到开发 64 位版本。 (项目 -> 属性 -> 更改顶部的平台选项)

【讨论】:

    【解决方案2】:

    您应该链接 curand.lib - 将其添加到链接器 -> 输入 -> 附加依赖项下的属性表中。

    这是您打开详细链接器输出的方式:

    【讨论】:

    • 我已经在 Linker->Input->Additional Dependencies 下添加了。
    • @Khalif21 有没有可能使用错误的位数?能否在属性页中开启详细链接器输出,并将链接阶段的输出粘贴到此处?
    • 我已经在 Linker->Input->Additional Dependencies 下添加了。我还尝试将其路径 C:\Program Files\NVIDIA Corporation\Installer2\CUDAToolkit_7.0.{CFA7F9AA-52A1-40E0-97FA-71C041D185CF}\lib\x64 添加到 CUDA Linker->常规-> 附加库目录。它没有解决问题。
    • @Rudolfs 这是链接器输出 cudart.lib;C:\Program Files\NVIDIA Corporation\Installer2\CUDAToolkit_7.0.{CFA7F9AA-52A1-40E0 -97FA-71C041D185CF}\lib\x64\curand.lib;%(AdditionalDependencies).
    • 您有链接错误,这些不是由您的代码中的问题引起的。你的设置有误。您应该检查工作示例中的所有设置,并与您损坏的项目进行比较以找出问题所在。你应该尝试在 64 位模式下构建。
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多