Я пытаюсь собрать dll для внешней программы, которая ранее работала нормально.Но .... По какой-то причине, если я попытаюсь скомпилировать следующее в Visual Studio 2008 Pro Sp1 (64-разрядная версия win7)
интенсивностиRescale << >> (src_img_in_data, maxValue, minValue, 1);
Я получу сообщение об ошибке:
1>..\inte.cpp(37) : error C2059: syntax error : '<'
Так что я где-то читал, что это должно быть в файле .cu, затем я попробовал следующее:
In "inte.cpp "у меня есть:
void inte( DM::Image img, float maxValue, float minValue )
{
#include "inte.h"
#include "Source1.h"
// Some stuff to get the pointer (float * img_data) //WORKS
intensityRescalec(img_data, maxValue, minValue,1);
}
В" inte.h "у меня просто есть:
void inte(DM::Image, float, float );
Затем я сделал .cu файл" Source1.cu ":
#include "Source1.h"
__global__ void intensityRescale(float *image, float maxValu, float minValu, int typ)
{
const int tid = (blockIdx.y*MNBLOCKX + blockIdx.x)*blockDim.x + threadIdx.x;
if(tid < MNX0*MNY0*MNZ0)
{
if(typ>0)
image[tid] = (image[tid] - minValu)/(maxValu-minValu);
else
image[tid] = image[tid]*(maxValu-minValu) + minValu;
}
}
void intensityRescalec(float *mimage, float mmaxValue, float mminValue,int mType)
{
dim3 Mnblocks;
Mnblocks.x = MNBLOCKX;
Mnblocks.y = ((1 + (MNX0*MNY0*MNZ0 - 1)/MNTHREAD_PER_BLOCK) - 1) / MNBLOCKX + 1;
intensityRescale<<<Mnblocks, MNTHREAD_PER_BLOCK>>>(mimage, mmaxValue,mminValue, 1);
}
А затем в "Source1.h":
#ifndef _Source1_h_INCLUDED__
#define _Source1_h_INCLUDED__
#include "cuda.h"
#include <cutil_inline.h>
#include <cublas.h>
#define MNBLOCKX 1024
#define MNX0 1024
#define MNY0 1024
#define MNZ0 1
#define MNBLOCKX 1024
#define MNTHREAD_PER_BLOCK 256
void intensityRescalec(float * da, float d, float f , int g);
void intensityRescale(float *image, float maxValu, float minValu, int typ);
#endif
Теперь, если у меня есть пользовательское правило сборки, cuda64.rules выдает следующее:
1>inte.obj : error LNK2019: unresolved external symbol "void __cdecl intensityRescalec(float *,float,float,int)" (?intensityRescalec@@YAXPEAMMMH@Z) referenced in function "void __cdecl inte(class Gatan_Image *,float,float)" (?inte@@YAXPEAVGatan_Image@@MM@Z)
1>C:\ProgramData\Gatan\DMSDK\ITK\buildcmake\Release\ITK.dll : fatal error LNK1120: 1 unresolved externals
Безправило:
1>C:\ProgramData\Gatan\DMSDK\ITK\buildcmake\Release\ITK.dll : fatal error LNK1169: one or more multiply defined symbols found
Я не использую переменные где-либо еще, так что это значит?
Также я должен построить это в многопоточном режиме DLL (/ MD), так какнекоторые другие библиотеки зависят от этого.Я не нашел cutil64D.lib в CUDA 4. Это устарело или я что-то пропустил.
Я скачал все наборы инструментов, драйверы, cuda SDK, buildrules и следовал инструкциям в нем.Также попробовал CUDA VS Wizard.
Я потратил на это дни!НИЧЕГО НЕ РАБОТАЕТ !!!
HELP!
Раньше мне удавалось встроить проект fft из CUFFT в dll, так что ...... Но это не затрагивало ядра.
Огромное спасибо за любые отзывы!