Проблемы с экспортом DLL в VS2010 (CUDA) - PullRequest
1 голос
/ 28 июня 2011

У меня возникли проблемы при создании решения DLL.Я делаю DLL для использования в LabVIEW 2010, чтобы иметь возможности 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: неразрешенный внешний символ _cufftPlan2d @ 16, указанный в функции _LVcufftPlan2D

, когда я пытаюсь построить решение.

Мне было интересно, что еще мне не хватает, из-за чего компоновщик продолжает генерировать неразрешенные внешние ошибки символов.

Автоматическая командная строка, сгенерированная из 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: \Программные файлы \ 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 / ОШИБКА:QUEUE

1 Ответ

2 голосов
/ 29 июня 2011

Я вижу cudart.lib в ваших командах компоновщика, но не cufft.lib.Вероятно, источник проблемы.

Я не знаю, что означает «автоматическая командная строка, генерируемая из CUDA», поэтому я не уверен, как вам нужно что-то менять.Я просто добавляю Cuda libs вручную в свойствах VS Linker.

...