Проблема со сборкой программы CUDA в VS2008: LNK2019.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Проблема со сборкой программы CUDA в VS2008: LNK2019.

Сообщение Anonymous »

У меня возникли проблемы с созданием программы. Я работаю над 32-разрядной версией Windows 7 Professional с Visual Studio 2008. У меня есть Cuda SDK, и мой проект настроен со всеми ссылками на cudart.lib и т. д. Моя проблема в том, что когда я пытаюсь собрать свой проект, он возвращает следующие ошибки :


1>crowdSim.obj: ошибка LNK2019:
неразрешенный внешний символ
_setParameters, на который ссылается функция «protected: void __thiscall
Crowd::_create(int)"
(?_create@Crowd@@IAEXH@Z)
1>crowdSim.obj: ошибка LNK2019:
неразрешенный внешний символ _mapBuffer
упоминается в функции «protected:
void __thiscall Crowd::_create(int)»
(?_create@Crowd@@IAEXH@Z)
1>crowdSim.obj: ошибка LNK2019:
неразрешенный внешний символ
_allocToDevice, указанный в функции «protected: void __thiscall
Crowd::_create(int)»
(?_create@Crowd@@IAEXH@Z) 1>crowdSim.obj: ошибка LNK2019:
неразрешенный внешний символ
_registerBuffer, на который ссылается функция «protected: void __thiscall
Crowd::_create(int)»
(? _create@Crowd@@IAEXH@Z)
1>../../bin/win32/Debug/crowd.exe:
фатальная ошибка LNK1120: 4 неразрешенных
внешних объекта


Похоже, моя проблема в том, как я настраиваю методы «allocToDevice», «mapBuffer», «setParameters» и «registerBuffer», поскольку if Я комментирую это и могу без проблем построить проект.

Я определил методы в следующих файлах:

crowdSim.cuh:

Код: Выделить всё

    extern "C"
{
void checkCUDAError(const char *msg);

void setParameters(SimParams *hostParams);

void registerBuffer(uint vbo);

void allocToDevice(void **ptr, int memSize);

void mapBuffer(void **ptr, uint vbo);
}
crowdSim.cu:

Код: Выделить всё

#include 
#include 
#include 

#include 

// includes, kernels
#include "crowd_kernel.cu"

extern "C"
{
void checkCUDAError(const char *msg)
{
cudaError_t err = cudaGetLastError();
if( cudaSuccess != err)
{
fprintf(stderr, "Cuda error: %s: %s.\n", msg, cudaGetErrorString( err) );
exit(-1);
}
}

void setParameters(SimParams *hostParams)
{
// copy parameters to constant memory
cudaMemcpyToSymbol(params, hostParams, sizeof(SimParams));
}

void registerBuffer(uint vbo)
{
cudaGLRegisterBufferObject(vbo);
}

void allocToDevice(void **ptr, size_t memSize)
{
cudaMalloc(ptr, memSize);
}

void mapBuffer(void **ptr, uint vbo)
{
cudaGLMapBufferObject(ptr, vbo);
}
} //extern "C"
и они вызываются только из метода _create в моем классе «Crowd» из CrowdSim.cpp:

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

#include "crowdSim.h"
#include "crowdSim.cuh"
#include "crowd_kernel.cuh"

Crowd::Crowd(uint crowdSize) :
//numP(crowdSize),
hPos(0),
hVel(0),
dPosIn(0),
dVelIn(0),
dPosOut(0),
dVelOut(0)
{
params.numBodies = crowdSize;
_create(crowdSize);
}

Crowd::~Crowd()
{
//_remove();
crowdSize = 0;
}

uint
Crowd::newVBO(uint size)
{
GLuint vbo;
//   glGenBuffers(1, &vbo);
//   glBindBuffer(GL_ARRAY_BUFFER, vbo);
//   glBufferData(GL_ARRAY_BUFFER, size, 0, GL_DYNAMIC_DRAW);
//   glBindBuffer(GL_ARRAY_BUFFER, 0);
return vbo;
}

void
Crowd::_create(int numPeople)
{
crowdSize = numPeople;

unsigned int memSize = sizeof(float) * crowdSize * 4;

hPos = new float[crowdSize*4];
hVel = new float[crowdSize*4];

hPos = (float*) malloc(memSize);
hVel = (float*) malloc(memSize);

posVbo = newVBO(memSize);

registerBuffer(posVbo);

allocToDevice((void**) &dPosIn, memSize);
allocToDevice((void**) &dPosOut, memSize);
allocToDevice((void**) &dVelIn, memSize);
allocToDevice((void**) &dVelOut, memSize);

mapBuffer((void**)&dPosVbo, posVbo);

setParameters(&params);

}
Мне кажется, что мне здесь не хватает чего-то очень простого, но я не могу понять, чего именно, поэтому любая помощь будет полезна!

Подробнее здесь: https://stackoverflow.com/questions/315 ... 08-lnk2019
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • RuntimeError: ошибка времени выполнения cuda (35): версия драйвера CUDA недостаточна для версии среды выполнения CUDA в
    Anonymous » » в форуме Python
    0 Ответы
    83 Просмотры
    Последнее сообщение Anonymous
  • CUDA ON DEBIAN TRIXIE: версия драйвера CUDA недостаточно для версии времени выполнения CUDA
    Anonymous » » в форуме Linux
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • VS2008 Ошибка компиляции с
    Anonymous » » в форуме C++
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Ошибка в компиляторе VS2008: не удается найти DLL.
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Будет ли компилятор C++ VS2008 оптимизировать следующий оператор if?
    Anonymous » » в форуме C++
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»