VISUAL STUDIO 2013:错误 LNK2019:无法解析的外部符号 - cuRAND - 随机数生成器
VISUAL STUDIO 2013 : error LNK2019: unresolved external symbol - cuRAND - Random Number Generator
我研究了几个小时,
- MSDN Microsoft - Linker Tools Error LNK2019
- How to solve the error LNK2019: unresolved external symbol - function?
- What is an undefined reference/unresolved external symbol error and how do I fix it?
- Error LNK2019: unresolved external symbol _wWinMain@16 referenced in function ___tmainCRTStartup
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.lib
进行链接 - 将其添加到链接器 -> 输入 -> 附加依赖项下的 属性 工作表中。
这是打开详细链接器输出的方式:
我猜你的代码可能是在 Win32 平台上开发的。只有基本的 CUDA API 支持,但 Win32 上没有 CURAND 库支持。您可以尝试切换到开发 64 位版本。 (项目 -> 属性 -> 更改顶部的平台选项)
我研究了几个小时,
- MSDN Microsoft - Linker Tools Error LNK2019
- How to solve the error LNK2019: unresolved external symbol - function?
- What is an undefined reference/unresolved external symbol error and how do I fix it?
- Error LNK2019: unresolved external symbol _wWinMain@16 referenced in function ___tmainCRTStartup
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.lib
进行链接 - 将其添加到链接器 -> 输入 -> 附加依赖项下的 属性 工作表中。
这是打开详细链接器输出的方式:
我猜你的代码可能是在 Win32 平台上开发的。只有基本的 CUDA API 支持,但 Win32 上没有 CURAND 库支持。您可以尝试切换到开发 64 位版本。 (项目 -> 属性 -> 更改顶部的平台选项)