Re: [問題] CUDA 光學繞射 error
以下是我執行的程式過程,
1.建立一個CUDA專案(空專案)
2. 依照http://thegwolibrary.sourceforge.net/ 將專案設定好
3. 把sample code貼上-->執行
一開始沒加#include "stdafx.h"時,
complie沒過,說是否缺乏#include "stdafx.h",
後來我加上它後,complie過了,但是出現24個錯誤,
#include "gwo.h"
#include "stdafx.h"
#define WIDTH 512
#define HEIGHT 512
#define WIDTH2 (WIDTH*2)
#define HEIGHT2 (HEIGHT*2)
float gwo_max=0.0, gwo_min=0.0;
//gwoComplex is the complex number.
//if you use to the real part of gwoComplex, please use GWO_RE(...).
//if you use to the imaginary part of gwoComplex, please use GWO_IM(...).
gwoComplex ape_small[WIDTH*WIDTH];
gwoComplex ape[WIDTH2*HEIGHT2];
gwoComplex result[WIDTH*HEIGHT];
unsigned char pix[WIDTH*WIDTH];
void main()
{
//Prepare an aperture with 20*20 pixel.
for(int i=0;i<HEIGHT;i++)
{
for(int j=0;j<WIDTH;j++)
{
if(j>WIDTH/2-10 && j<WIDTH/2+10 && i>HEIGHT/2-10 && i<HEIGHT/2+10)
{
GWO_RE(ape_small[(j)+(i)*WIDTH])=1.0;
GWO_IM(ape_small[(j)+(i)*WIDTH])=0.0;
}
}
}
//Initialize the library.
gwoInit(GWO_ANGULAR,WIDTH2,HEIGHT2); //if you calculate the Angular
spectrum
//gwoInit(GWO_FRESNEL_CONV,WIDTH2,HEIGHT2);//if you calculate the Fresnel
difraction(convolution type)
//gwoInit(GWO_SHIFTED_FRESNEL,WIDTH2,HEIGHT2);////if you calculate the
Shifted-Fresnel difraction
//Expands the original aperture (ape_small).
//The expanded aperture (ape) has double size as compared with the
original aperture.
gwoHostExpandC2C(
ape_small,WIDTH,HEIGHT,
ape,WIDTH2,HEIGHT2);
//Set the sampling spacing (4.65 um) on the aperture and the diffracted
plane.
gwoSetPitch(4.65e-6, 4.65e-6);
//Set the wavelength (633nm).
gwoSetWaveLength(633.0e-9);
//Send the expanded aperture to the GPU.
gwoSendData(ape);
//Calculate the diffraction with the propagation distance of 0.2m.
gwoCalc(0.2);
//If you need the light intensity of the diffracted light,
//please execute gwoIntensity().
//If you do not need the light intensity,
//please comment out gwoIntensity();
gwoIntensity();
//The host computer receives the calculated result (the diffracted
result).
gwoReceiveResult(ape);
//Reduce the expanded aperture (ape) to the buffer (result).
gwoHostExpandC2C(
ape,WIDTH2,HEIGHT2,
result,WIDTH,HEIGHT);
//Search the maximum and minimum value in the buffer (result).
gwoHostSearchMaxMin(result,&gwo_max,&gwo_min,WIDTH,HEIGHT);
//Convert the light intensity to 256 monochrome image.
for(int i=0;i<HEIGHT;i++)
{
for(int j=0;j<WIDTH;j++)
{
float tmp=GWO_RE(result[j+i*WIDTH]);
unsigned char c=(unsigned char)(255.0*(tmp-gwo_min)/gwo_max);
pix[j+i*WIDTH]=c;
}
}
//Finalize the library.
gwoFree();
}
%%%%%%%%%%%%%%%%%%%% 錯誤 %%%%%%%%%%%%%%%%%%%
1>------ 已開始建置: 專案: popop, 組態: Debug Win32 ------
1>正在連結...
1>popop.obj : warning LNK4075: 忽略 '/EDITANDCONTINUE',由於
'/INCREMENTAL:NO' 規格
1>popop.obj : error LNK2005: _main 已在 sample.obj 中定義過了
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void
*)" (??3@YAXPAX@Z) 已在 LIBCMT.lib(delete.obj) 中定義過了
1>libcmtd.lib(dbgheap.obj) : error LNK2005: __heap_alloc 已在
LIBCMT.lib(malloc.obj) 中定義過了
1>libcmtd.lib(dbgheap.obj) : error LNK2005: __recalloc 已在
LIBCMT.lib(recalloc.obj) 中定義過了
1>libcmtd.lib(dbgheap.obj) : error LNK2005: __msize 已在
LIBCMT.lib(msize.obj) 中定義過了
1>libcmtd.lib(malloc.obj) : error LNK2005: _V6_HeapAlloc 已在
LIBCMT.lib(malloc.obj) 中定義過了
1>libcmtd.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook 已在
LIBCMT.lib(dbghook.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: __get_sbh_threshold 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: __set_sbh_threshold 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: __set_amblksiz 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: __get_amblksiz 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_heap_init 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_find_block 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_free_block 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_alloc_block 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_alloc_new_region 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_alloc_new_group 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_resize_block 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_heapmin 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_heap_check 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_pHeaderDefer 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(isctype.obj) : error LNK2005: __isctype_l 已在
LIBCMT.lib(isctype.obj) 中定義過了
1>libcmtd.lib(isctype.obj) : error LNK2005: __isctype 已在
LIBCMT.lib(isctype.obj) 中定義過了
1>LINK : warning LNK4098: 預設的程式庫 'libcmtd.lib' 與其他使用的程式庫衝突,
請使用 /NODEFAULTLIB:library
1>C:\Documents and Settings\XP\My Documents\Visual Studio
2008\Projects\CUDA\popop\Debug\popop.exe : fatal error LNK1169: 找到有一或多個
已定義的符號
1>已將建置記錄儲存於 "file://c:\Documents and Settings\XP\My Documents\Visual
Studio 2008\Projects\CUDA\popop\popop\Debug\BuildLog.htm"
1>popop - 24 個錯誤,2 個警告
========== 建置: 0 成功、1 失敗、0 最新、0 略過 ==========1>------ 已開始建置: 專案: popop, 組態: Debug Win32 ------
1>正在連結...
1>popop.obj : warning LNK4075: 忽略 '/EDITANDCONTINUE',由於
'/INCREMENTAL:NO' 規格
1>popop.obj : error LNK2005: _main 已在 sample.obj 中定義過了
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void
*)" (??3@YAXPAX@Z) 已在 LIBCMT.lib(delete.obj) 中定義過了
1>libcmtd.lib(dbgheap.obj) : error LNK2005: __heap_alloc 已在
LIBCMT.lib(malloc.obj) 中定義過了
1>libcmtd.lib(dbgheap.obj) : error LNK2005: __recalloc 已在
LIBCMT.lib(recalloc.obj) 中定義過了
1>libcmtd.lib(dbgheap.obj) : error LNK2005: __msize 已在
LIBCMT.lib(msize.obj) 中定義過了
1>libcmtd.lib(malloc.obj) : error LNK2005: _V6_HeapAlloc 已在
LIBCMT.lib(malloc.obj) 中定義過了
1>libcmtd.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook 已在
LIBCMT.lib(dbghook.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: __get_sbh_threshold 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: __set_sbh_threshold 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: __set_amblksiz 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: __get_amblksiz 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_heap_init 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_find_block 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_free_block 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_alloc_block 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_alloc_new_region 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_alloc_new_group 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_resize_block 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_heapmin 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_heap_check 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(sbheap.obj) : error LNK2005: ___sbh_pHeaderDefer 已在
LIBCMT.lib(sbheap.obj) 中定義過了
1>libcmtd.lib(isctype.obj) : error LNK2005: __isctype_l 已在
LIBCMT.lib(isctype.obj) 中定義過了
1>libcmtd.lib(isctype.obj) : error LNK2005: __isctype 已在
LIBCMT.lib(isctype.obj) 中定義過了
1>LINK : warning LNK4098: 預設的程式庫 'libcmtd.lib' 與其他使用的程式庫衝突,
請使用 /NODEFAULTLIB:library
1>C:\Documents and Settings\XP\My Documents\Visual Studio
2008\Projects\CUDA\popop\Debug\popop.exe : fatal error LNK1169: 找到有一或多個
已定義的符號
1>已將建置記錄儲存於 "file://c:\Documents and Settings\XP\My Documents\Visual
Studio 2008\Projects\CUDA\popop\popop\Debug\BuildLog.htm"
1>popop - 24 個錯誤,2 個警告
========== 建置: 0 成功、1 失敗、0 最新、0 略過 ==========
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.122.193.103
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
1
13
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章