VISUAL STUDIO 2013 : error LNK2019: nicht aufgelöstes externes symbol - cuRAND - Random Number Generator
Habe ich recherchiert, stundenlang,
- MSDN-Microsoft - Linker Tools Error LNK2019
- Wie löst man den Fehler LNK2019: nicht aufgelöstes externes symbol - Funktion?
- Was ist eine undefined reference/nicht aufgelöstes externes symbol Fehler und wie behebe ich es?
- Fehler LNK2019: nicht aufgelöstes externes symbol _wWinMain@16 referenced in function ___tmainCRTStartup
-
aber habe nicht gefunden, einen Weg zur Behebung der folgenden Fehler,
HTML:
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
HTML:
#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);
}
Sollte ich hinzufügen #include? (Ich bin nicht gut in Englisch sehr viel)
- können Sie erstellen, die von der CUDA Beispiel-Projekte, die CURAND? Wenn dem so ist, kann man studieren, diejenigen zu verstehen, die richtige Projekt-Einstellungen.
- @Robert ja, kann ich.
- Diese Projekte haben alle notwendigen Einstellungen für die Verwendung von CURAND, ohne dass die undefined reference-Fehler.
- Ich denke, ja.
- Das bedeutet also, dass Sie sollten in der Lage sein, zu studieren, diese Projekte (oder einfach nur re-verwenden Sie eine von Ihnen) und Ihr Problem gelöst. AFAIK keines dieser Projekte sind die Erstellung einer dll, aber das ist ein separates Problem und vermutlich haben Sie das herausgefunden (Sie scheinen nicht zu Fragen, über die es hier).
- @Robert ich muss es wissen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Schätze, dass Sie möglicherweise entwickelt haben, Ihren code auf Win32-Plattform. Es ist nur basic CUDA-API-Unterstützung aber keine CURAND-Bibliothek Unterstützung für Win32. Sie können versuchen, die Umstellung auf die Entwicklung einer 64-bit-version. (Projekt -> Eigenschaften -> ändern Sie die Plattform-option auf der Oberseite)
Sollten Sie verknüpfen gegen
curand.lib
- fügen Sie in der Eigenschaft der Blätter unter Linker -> Eingang -> Zusätzliche Abhängigkeiten.Dies ist, wie Sie drehen Sie die ausführliche linker Ausgang: