>

Windows 10에서 Visual Studio 2015 x64와 함께 Qt 작성자와 함께 Qt5.8에서 Cuda 8.0을 사용하기 시작했으며 다음과 같은 해결되지 않은 기호가 나타납니다.

cuda_code_cuda.o : error LNK2019: 澷朄夝愅揑奜晹晞崋 atexit丆
cuda_code_cuda.o : error LNK2019: 澷朄夝愅揑奜晹晞崋 cudaDeviceSynchronize丆
cuda_code_cuda.o : error LNK2019: 澷朄夝愅揑奜晹晞崋 cudaConfigureCall丆
cuda_code_cuda.o : error LNK2019: 澷朄夝愅揑奜晹晞崋 cudaSetupArgument丆
cuda_code_cuda.o : error LNK2019: 澷朄夝愅揑奜晹晞崋 cudaLaunch丆
cuda_code_cuda.o : error LNK2019: 澷朄夝愅揑奜晹晞崋 __imp_fminf丆
...

내 .pro 파일은 다음과 같습니다 :

QT += core
QT -= gui
CONFIG += c++11
TARGET = QtWithCuda
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
#-------------------------------------------------
# CUDA settings
CUDA_SOURCES += cuda_code.cu
CUDA_DIR = "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/"
SYSTEM_NAME = x64
SYSTEM_TYPE = 64
CUDA_ARCH = compute_50
CUDA_CODE = sm_50
NVCC_OPTIONS = --use_fast_math
# include paths
INCLUDEPATH += "$$CUDA_DIR/include"
# library directories
QMAKE_LIBDIR += "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64" \
"E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\lib\amd64" \
"E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\amd64" \
"C:\Program Files (x86)\Windows Kits\10\lib\10.0.10240.0\ucrt\x64" \
# "C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64" \
"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\x64" \
"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\Lib\um\x64"
# The following makes sure all path names (which often include spaces) are put between quotation marks
CUDA_INC = $$join(INCLUDEPATH,'" -I"','-I"','"')
# Add the necessary libraries
CUDA_LIB_NAMES += \
cuda \
cudart \
kernel32 \
user32 \
gdi32 \
winspool \
comdlg32 \
advapi32 \
shell32 \
ole32 \
oleaut32 \
uuid \
odbc32 \
odbccp32 \
ucrt
for(lib, CUDA_LIB_NAMES) {
    CUDA_LIBS += $$lib.lib
}
for(lib, CUDA_LIB_NAMES) {
    NVCC_LIBS += -l$$lib
}
LIBS += $$CUDA_LIBS
# The following library conflicts with something in Cuda
QMAKE_LFLAGS_RELEASE = /NODEFAULTLIB:msvcrt.lib
QMAKE_LFLAGS_DEBUG   = /NODEFAULTLIB:msvcrtd.lib
# MSVCRT link option (static or dynamic, it must be the same with your Qt SDK link option)
MSVCRT_LINK_FLAG_DEBUG   = "/MDd"
MSVCRT_LINK_FLAG_RELEASE = "/MD"
# Configuration of the Cuda compiler
CONFIG(debug, debug|release) {
    # Debug mode
    DESTDIR = debug
    OBJECTS_DIR = debug/obj
    CUDA_OBJECTS_DIR = debug/cuda
    cuda_d.input = CUDA_SOURCES
    cuda_d.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
    cuda_d.commands = $$CUDA_DIR/bin/nvcc.exe -D_DEBUG $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS \
                  --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -code=$$CUDA_CODE \
                  --compile -cudart static -g -DWIN32 -D_MBCS \
                  -Xcompiler "/wd4819,/EHsc,/W3,/nologo,/Od,/Zi,/RTC1" \
                  -Xcompiler $$MSVCRT_LINK_FLAG_DEBUG \
                  -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
    cuda_d.dependency_type = TYPE_C
    QMAKE_EXTRA_COMPILERS += cuda_d
}
else {
    # Release mode
    DESTDIR = release
    OBJECTS_DIR = release/obj
    CUDA_OBJECTS_DIR = release/cuda
    cuda.input = CUDA_SOURCES
    cuda.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
    cuda.commands = $$CUDA_DIR/bin/nvcc.exe $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS \
                --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -code=$$CUDA_CODE \
                #--use-local-env --cl-version 2015 -ccbin "E:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64" \
                --compile -cudart static -D_MBCS \
                -Xcompiler "/wd4819,/EHsc,/W3,/nologo,/O2,/Zi" \
                -Xcompiler $$MSVCRT_LINK_FLAG_RELEASE \
                -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
    cuda.dependency_type = TYPE_C
    QMAKE_EXTRA_COMPILERS += cuda
}

qt에서 cuda를 구성하는 것에 대한 스레드를 읽었지만 아무도 이와 같은 오류가 발생하지 않는 것 같습니다. VS 샘플 링커 설정에 표시된 모든 lib 파일을 복사했지만 여전히 오류가 발생합니다. 어떻게해야합니까?


  • 답변 # 1

    이제 msvcrt를 lib 목록에 추가하여 해결했습니다. 이 파일이 샘플 Visual Studio 프로젝트에없는 이유가 궁금합니다.

  • 이전 asyncstorage - 반응 형 동기화 스토리지 솔루션
  • 다음 python - 정렬 된 배열 이름을 반환하는 방법?