在 VS2010 (CUDA) 中导出 DLL 的问题
Posted
技术标签:
【中文标题】在 VS2010 (CUDA) 中导出 DLL 的问题【英文标题】:Problems with exporting DLL in VS2010 (CUDA) 【发布时间】:2020-04-05 09:20:50 【问题描述】:我在构建 DLL 解决方案时遇到了问题。我正在制作用于 LabVIEW 2010 的 DLL,以便具有 CUDA 功能。但是,我要导出的每一个函数都出现链接器错误 LNK2019。
#include "LVCUDA.h"
#include "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include\cufft.h"
#include "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include\cuda.h"
#include <windows.h>
#include <string.h>
#include <ctype.h>
BOOL WINAPI DllMain (
HANDLE hModule,
DWORD dwFunction,
LPVOID lpNot)
return TRUE;
__declspec(dllexport) cufftHandle LVcufftPlan2D(int Xsize, int Ysize)
cufftHandle plan;
cufftPlan2d(&plan, Xsize, Ysize, CUFFT_C2C);
return plan;
__declspec(dllexport) void LVexecute(cufftHandle plan, cufftComplex *data, int direction)
if (direction == 1) cufftExecC2C(plan, data, data, CUFFT_INVERSE);
else cufftExecC2C(plan, data, data, CUFFT_FORWARD);
__declspec(dllexport) void LVdestroy(cufftHandle plan)
cufftDestroy(plan);
__declspec(dllexport) void LV_cudaFree(CUdeviceptr ptr)
cuMemFree(ptr);
__declspec(dllexport) void LV_cudaMalloc(CUdeviceptr *ptr, int cnt)
cuMemAlloc(ptr, cnt);
__declspec(dllexport) void LV_cudaMemcopy(CUdeviceptr src, CUdeviceptr dst, int cnt)
cuMemcpy(dst, src, cnt);
我已经将构建自定义更改为 CUDA 4.0,因此所有库都包含在依赖项中。但是,我仍然收到以下错误:
1>LVCUDA.obj : 错误 LNK2019: 函数 _LVcufftPlan2D 中引用的未解析外部符号 _cufftPlan2d@16
当我尝试构建解决方案时。
我想知道我还缺少什么导致链接器不断抛出未解决的外部符号错误。
从 CUDA 生成的自动命令行是:
/OUT:"C:\VC Projects\CUDA\Debug\CUDA.dll" /INCREMENTAL /NOLOGO /LIBPATH:"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\bin" /LIBPATH :"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\lib\x64" /LIBPATH:"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\lib\Win32" /DLL “cudart.lib” “kernel32.lib” “user32.lib” “gdi32.lib” “winspool.lib” “comdlg32.lib” “advapi32.lib” “shell32.lib” “ole32.lib” “oleaut32.lib” "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"Debug\CUDA.dll.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\VC Projects\CUDA\Debug\CUDA.pdb" /SUBSYSTEM:WINDOWS /PGD:"C:\VC Projects\CUDA\Debug\CUDA.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE :X86 /ERRORREPORT:QUEUE
【问题讨论】:
您当前的链接命令行是什么?问题很可能在那里...... 【参考方案1】:我在您的链接器命令中看到了 cudart.lib,但没有看到 cufft.lib。可能是问题的根源。
我不知道“从 CUDA 生成的自动命令行”是什么意思,所以我不确定您需要如何进行更改。我只是在 VS Linker 属性中手动添加 Cuda 库。
【讨论】:
现在一切似乎都正确构建了。这似乎只是问题的一半。另一半忘记包含 cuda_runtime.h 头文件。不过感谢您的帮助。以上是关于在 VS2010 (CUDA) 中导出 DLL 的问题的主要内容,如果未能解决你的问题,请参考以下文章
VS2013/Cuda7.0 中的 CUFFT 比 VS2010/Cuda4.2 慢 1000 倍
如何在VS2010或VS2008下编译一个CUDA Toolkit 4.0 RC2程序?
在 QtCreator (VS 2010) 中设置 CUDA v7.0