VS2010 error LNK2019: 无法解析的外部符号

问题描述

VS2010 error LNK2019: 无法解析的外部符号

程序如下:
#include
#include
#include
#include
#include
#include
#include

#include
#include

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include "cuda_runtime.h"
#include
#include

#include "ImgPro_cu.cU"

using namespace std;

using namespace cv;

extern "C"
double cudaMSR_RGB(
BYTE* pImgOut,
BYTE* pImgIn,
int nWidth,
int nHeight,
int nWidthStep)
{
int FilterWidth = nWidth;
int FilterHeight = nHeight;
float sigma = 300;
int DataBits = 8;
int fftW = nWidth;
int fftH = nHeight;

float  *h_pDataSrcRGB = NULL;
float *h_pDataDst=  NULL;
float *h_pKernel=  NULL;
float *d_Kernel= NULL;
float *d_DataSrc= NULL;
float *d_DataDst= NULL;
fComplex *d_DataSpectrum;
fComplex *d_KernelSpectrum;

h_pDataSrcRGB       = (float*)malloc(nWidth*nHeight*sizeof(float));
h_pDataDst  = (float*)malloc(nWidth*nHeight*sizeof(float));
h_pKernel       = (float*)malloc(FilterWidth*FilterHeight*sizeof(float));
cudaMalloc((void **)&d_Kernel, FilterWidth*FilterHeight*sizeof(float));
cudaMalloc((void **)&d_DataSrc,nWidth*nHeight*sizeof(float) );
cudaMalloc((void **)&d_DataDst,nWidth*nHeight*sizeof(float) );
cudaMalloc((void **)&d_DataSpectrum  , fftH*(fftW/2+1)*sizeof(fComplex) );
cudaMalloc((void **)&d_KernelSpectrum, fftH*(fftW/2+1)*sizeof(fComplex) );

memset(h_pDataSrcRGB,0,nWidth*nHeight*sizeof(float));
memset(h_pDataDst,      0, nWidth*nHeight*sizeof(float));
memset(h_pKernel    ,       0, FilterWidth*FilterHeight*sizeof(float));
cudaMemset(d_Kernel,    0, FilterWidth*FilterHeight*sizeof(float));
cudaMemset(d_DataSrc, 0, nWidth*nHeight*sizeof(float));
cudaMemset(d_DataDst, 0, nWidth*nHeight*sizeof(float));
cudaMemset(d_DataSpectrum  , 0, fftH*(fftW/2+1)*sizeof(fComplex));
cudaMemset(d_KernelSpectrum, 0, fftH*(fftW/2+1)*sizeof(fComplex));

//产生高斯滤波器
GaussFilter(h_pKernel, sigma, FilterWidth, FilterHeight);

//定义傅里叶变换
cufftHandle fftPlanFwd, fftPlanInv;
cufftPlan2d(&fftPlanFwd, nHeight, nWidth, CUFFT_R2C);
cufftPlan2d(&fftPlanInv, nHeight, nWidth, CUFFT_C2R);

//计时开始
clock_t start, finish;
double  dDuration = 0.0;
start = clock();

for (int i_Channel = 1;i_Channel<=3;i_Channel++)
{
    for (int y = 0; y < nHeight; y++)
    {
        for (int x=0;x<nWidth;x++)
        {
            h_pDataSrcRGB[y * nWidth + x ] = pImgIn[y * nWidthStep + 3*x + i_Channel];//RGB三个通道
        }
    }

    cudaMemcpy(d_DataSrc, h_pDataSrcRGB, nWidth*nHeight*sizeof(float),
        cudaMemcpyHostToDevice);
    cudaMemcpy(d_Kernel,  h_pKernel,  nWidth*nHeight*sizeof(float),
        cudaMemcpyHostToDevice);

    //执行傅里叶正变换
    cufftExecR2C(fftPlanFwd, d_DataSrc, (cufftComplex *)d_DataSpectrum);
    cufftExecR2C(fftPlanFwd, d_Kernel , (cufftComplex *)d_KernelSpectrum);
    //频域数据点乘
    modulateAndNormalize(d_DataSpectrum, d_KernelSpectrum, fftH, fftW);
    //执行傅里叶逆变换
    cufftExecC2R(fftPlanInv, (cufftComplex *)d_DataSpectrum, d_DataDst);
    //图像高频增强
    High_Frequency_Enhancer(d_DataDst, d_DataSrc, nWidth, nHeight);
    //图像灰度拉伸映射
    cudaMemcpy(d_DataSrc, d_DataDst, nWidth*nHeight*sizeof(float),
        cudaMemcpyDeviceToDevice);
    float Vmax = GetMaxValue(d_DataSrc, nWidth*nHeight);
    cudaMemcpy(d_DataSrc, d_DataDst, nWidth*nHeight*sizeof(float),
        cudaMemcpyDeviceToDevice);
    float Vmin = GetMinValue(d_DataSrc, nWidth*nHeight);
    GrayReset(d_DataDst, d_DataDst, nWidth, nHeight, Vmax, Vmin, DataBits);

    cudaMemcpy(h_pDataDst, d_DataDst, nWidth*nHeight*sizeof(float),
        cudaMemcpyDeviceToHost);

    for (int x=0;x<nWidth*nHeight;x++)
    {
        pImgOut[3*x+i_Channel] = h_pDataDst[x] ;//RGB三个通道
    }
}

//计时结束
finish = clock();
dDuration = (double)(finish - start) / CLOCKS_PER_SEC;

cufftDestroy(fftPlanFwd);
cufftDestroy(fftPlanInv);

free(h_pDataSrcRGB);
free(h_pDataDst);
free(h_pKernel);
cudaFree(d_DataSrc);
cudaFree(d_DataDst);
cudaFree(d_Kernel);
cudaFree(d_DataSpectrum);
cudaFree(d_KernelSpectrum);

return dDuration;

}
int main()
{

IplImage *src = cvLoadImage("22.jpg");
IplImage *dst = cvCloneImage( src );
BYTE* srcdata = (BYTE *) src->imageData;
int nWidth = src->width;
int nHeight = src->height;
int nWidthStep = src->widthStep;
BYTE* dstdata = (BYTE *) dst->imageData;
cudaMSR_RGB(srcdata, dstdata,nWidth,nHeight,nWidthStep);

cvNamedWindow("原画",0);
cvShowImage("原画",src);
cvNamedWindow("色彩还原",0);
cvShowImage("色彩还原",dst);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&src);

}
运行后显示如下:
1>Laplacian.cu.obj : error LNK2019: 无法解析的外部符号 _cufftDestroy@4,该符号在函数 "void __cdecl ConvolutionFFT(float *,float *,float *,int,int,int,int)" (?ConvolutionFFT@@YAXPAM00HHHH@Z) 中被引用
1>Laplacian.cu.obj : error LNK2019: 无法解析的外部符号 _cufftExecC2R@12,该符号在函数 "void __cdecl ConvolutionFFT(float *,float *,float *,int,int,int,int)" (?ConvolutionFFT@@YAXPAM00HHHH@Z) 中被引用
1>Laplacian.cu.obj : error LNK2019: 无法解析的外部符号 _cufftExecR2C@12,该符号在函数 "void __cdecl ConvolutionFFT(float *,float *,float *,int,int,int,int)" (?ConvolutionFFT@@YAXPAM00HHHH@Z) 中被引用
1>Laplacian.cu.obj : error LNK2019: 无法解析的外部符号 _cufftPlan2d@16,该符号在函数 "void __cdecl ConvolutionFFT(float *,float *,float *,int,int,int,int)" (?ConvolutionFFT@@YAXPAM00HHHH@Z) 中被引用
1>C:UsersXuDesktopLaplacianVibeDebugLaplacian.exe : fatal error LNK1120: 4 个无法解析的外部命令
求问大神怎么解决这个问题。万分感谢

解决方案

最近在尝试用UDT进行通信,写了两个简单的客户端和服务端,但是编译的时候出现了“error LNK2019: 无法解析的外部符号”错误,为了以后进行总结,还是把解决方法记录下来。
1>------ 已启动生成: 项目: udt_appserver, 配置: Debug Win32 ------
1>生成启动时间为 2013/11/11 20:53:08。
1>InitializeBuildS......
答案就在这里:error LNK2019: 无法解析的外部符号

解决方案二:

error LNK2019都是只有函数声明而找不到函数实现
检查:
附加库目录
附加依赖项

解决方案三:

你用的cuda的lib库要链接到工程中。这些函数定义摘不到实现。

时间: 2024-12-25 02:58:18

VS2010 error LNK2019: 无法解析的外部符号的相关文章

lnk1120-vs2010运行程序报错:error LNK2019: 无法解析的外部符号

问题描述 vs2010运行程序报错:error LNK2019: 无法解析的外部符号 如题,我在vs2010环境下做C++练习题时出现该错误.程序代码如下: //array.h#ifndef ARRAY_H#define ARRAY_Htemplate<typename T>class Array{public: Array(int n);//数组首地址不用指定,待会分配 Array(Array &a); ~Array(); T getAt(int i);//返回第i个数组元素 voi

error LNK2019: 无法解析的外部符号 _deflate

我的环境为: Win764 + VS2005 + zlib1.2.8 zlib1.2.8我使用VS2010来编译. ------------------------------------------------------------------------------------------------- 我导入zlib库的代码如下: #include "zlib128/zlib.h"// #pragma comment(lib, "zlib128/zlibwapi.li

c++-C++ error LNK2019: 无法解析的外部符号

问题描述 C++ error LNK2019: 无法解析的外部符号 在看某项目的源码时 发现其使用了第三方的头文件,之后我就去官网下载了. 下载来是压缩文件 里面有一些.c .h之类的文件,我把这些文件都包含在源码中. 然后运行就出现了: error LNK2019: 无法解析的外部符号 _jpeg_std_error,该符号在函数 "unsigned int __cdecl rescaleJPEG(unsigned char *,unsigned int,unsigned char * *,i

c++-VS2013 C++ error LNK2019: 无法解析的外部符号

问题描述 VS2013 C++ error LNK2019: 无法解析的外部符号 #include #include #include using namespace std; #include template class CMatrix { T * * Mat; int nRow; int nCol; public: CMatrix(); CMatrix(int row, int col); CMatrix(int row, int col, int k); void Show(); voi

graph-matlab进行mex时出现 error LNK2019: 无法解析的外部符号……

问题描述 matlab进行mex时出现 error LNK2019: 无法解析的外部符号-- **具体问题是:我想把现有的.cpp文件转成.mexw32的文件,代码没有出现错误,因为前辈曾转出过64位的.** 而且配置应该没问题,因为mex代码中其他.cpp文件是可以做出来的,唯独这个出现以下错误: mex mex_maxflow.cpp 正在创建库 C:DOCUME~1ADMINI~1LOCALS~1TEMPMEX_4W~1templib.x 和对象 C:DOCUME~1ADMINI~1LOC

python-Python中出现error LNK2019无法解析的外部符号 _PyCallable_Check

问题描述 Python中出现error LNK2019无法解析的外部符号 _PyCallable_Check #include #include #include using namespace std; int main() { Py_Initialize(); if (!Py_IsInitialized()) { return -1; } PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.patth.app

linkerror-1&amp;amp;gt;Generic.obj : error LNK2019: 无法解析的外部符号

问题描述 1>Generic.obj : error LNK2019: 无法解析的外部符号 //Generic.cpp #include // 每一个 Windows 程序都需要包含此档 #include "resource.h" // 內含各个 resource IDs #include "Generic.h" // 本程序之含入档 HINSTANCE _hInst; // Instance handle HWND _hWnd; char _szAppNam

c语言提示error LNK2019: 无法解析的外部符号

问题描述 c语言提示error LNK2019: 无法解析的外部符号 在c语言中实现对对象的管理 前面的代码是这样的 #include #include #include "ObjMgt.h" typedef struct key{ unsigned int key1; unsigned int key2; unsigned int key3; struct key * next; }keyall ; /*****************************************

gsoap遇到“error LNK2019: 无法解析的外部符号 ”,跪求解决方法

问题描述 gsoap遇到"error LNK2019: 无法解析的外部符号 ",跪求解决方法 在网上找了很多类似连接错误的解决方法,但是都解决不了,请问是少了什么库还是其他问题,我用的是VS2008编译. 解决方案 问题已经解决了,虽然不是正确答案,但还是要谢谢你,TKS! 解决方案二: 应该是编译选项的问题.先看代码中是否有你对应版本的编译器工程,这样比较好编译.