CUDA: функция '_ZNK1B3fooEv' получила адрес, но его невозможно вызвать - PullRequest
0 голосов
/ 12 июля 2019

Код ниже выдает предупреждение, упомянутое в заголовке, но код работает.Каковы последствия предупреждения?Спасибо.

class A
{
protected:
   __host__ __device__ virtual void foo() const = 0;
};

class B : public A
{
public:
   __host__ __device__ B() { foo(); }

protected:
   __host__ __device__ virtual void foo() const override {
      printf("aaa\n");
   }
};

__global__ void useB()
{
   B *b = new B();
   //B b;
}

int main()
{
   useB << <1, 1 >> >();
   checkCudaErrors(cudaDeviceSynchronize());
   checkCudaErrors(cudaGetLastError());

   return 0;
}

Отредактировано: Использование с использованием 8.0, V8.0.60.на VS 2013 V12.0.31101 Обновление 4.

Не уверен, поможет ли что-нибудь из этого:

C / C ++

/GS /GL /analyze- /W3 /Gy /Zc:wchar_t /I"C:\Users\xxx\Documents\GitHub\xxxxxxxxxx\xxxxxxxxxx\xxxxxxxxxx" /I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include" /Zi /Gm- /O2 /Fd"Release\vc120.pdb" /fp:precise /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /Oi /MD /Fa"Release\" /EHsc /nologo /Fo"Release\" /Fp"Release\xxxxxxxxxx.pch" 

CUDA C / C ++

# Driver API (NVCC Compilation Type is .cubin, .gpu, or .ptx)
set CUDAFE_FLAGS=--sdk_dir "C:\Program Files (x86)\Windows Kits\8.1\"
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin\nvcc.exe" --use-local-env --cl-version 2013 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin" -rdc=true       --keep-dir Release -maxrregcount=0  --machine 32 --compile -cudart static  -o Release\%(Filename)%(Extension).obj "%(FullPath)"

# Runtime API (NVCC Compilation Type is hybrid object or .c file)
set CUDAFE_FLAGS=--sdk_dir "C:\Program Files (x86)\Windows Kits\8.1\"
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin\nvcc.exe" --use-local-env --cl-version 2013 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin" -rdc=true       --keep-dir Release -maxrregcount=0  --machine 32 --compile -cudart static      -Xcompiler "/EHsc  /nologo  /FS /Zi   " -o Release\%(Filename)%(Extension).obj "%(FullPath)"

Linker

/OUT:"C:\Users\xxx\Documents\GitHub\xxxxxxxxxx\xxxxxxxxxx\Release\xxxxxxxxxx.exe" /MANIFEST /LTCG /NXCOMPAT /PDB:"C:\Users\xxx\Documents\GitHub\xxxxxxxxxx\xxxxxxxxxx\Release\xxxxxxxxxx.pdb" /DYNAMICBASE "cudadevrt.lib" "cudart_static.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" /DEBUG /MACHINE:X86 /OPT:REF /SAFESEH /INCREMENTAL:NO /PGD:"C:\Users\xxx\Documents\GitHub\xxxxxxxxxx\xxxxxxxxxx\Release\xxxxxxxxxx.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Release\xxxxxxxxxx.exe.intermediate.manifest" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\Win32" /TLBID:1

CUDA Linker

"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin\nvcc.exe" -dlink -o Release\xxxxxxxxxx.device-link.obj -Xcompiler "/EHsc  /nologo  /Zi   "     -G  

Предупреждение получено на этапе CUDA Linker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...