CUDA 6.5: ошибка MSB3191 Невозможно создать каталог и LNK2001 Неразрешенный внешний символ

Я использую CUDA 6.5 на Visual Studio 2013 x64.

У меня есть проект статической библиотеки VC ++ с именем MyLib, который связан с исполняемым проектом консоли MyClient x64. Я добавил настройку сборки CUDA 6.5 в оба проекта. Кроме того, я захожу в Свойства конфигурации -> CUDA C / C ++ и установил «Целевую машинную платформу» как 64-битную для этих двух проектов, так как хочу скомпилировать их для платформы x64.

Я добавил файлы MyCUDACode.cpp и MyCUDACode.h в проект MyLib и пометил их тип элемента как CUDA C / C ++ вместо oc C / C ++ компилятор. MyCUDACode.cpp имеет ряд функций, которые вызывают функции API CUDA. Кроме того, MyCUDACode.h ссылается на файлы cuda.h и cuda_runtime.h.

MyClient связан с MyLib. Теперь я получаю две ошибки компиляции:

  • Первая ошибка в компиляции MyLib, которая говорит, что Невозможно создать каталог
  • Во-вторых, я получаю неразрешенные внешние ошибки символов при связывании
    MyClient с MyLib. Вот вывод журнала:

    —— Начата сборка: Проект: MyLib, Конфигурация: Выпуск x64 ——
    1> C: \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V120 \ BuildCustomizations \ CUDA 6.5.targets (412,9): ошибка MSB3191: невозможно создать каталог «x64 \ Release \ D: \ GitHub \ SRC \ хелперы \». Формат данного пути не поддерживается.

    2> —— Началась сборка: Проект: MyClient, Конфигурация: Выпуск x64 ——
    2> MyLib.lib (MyCUDACode.obj): ошибка LNK2001: неразрешенный внешний символ cudaGetDeviceCount

    2> MyLib.lib (MyCUDACode.obj): ошибка LNK2001: неразрешенный внешний символ cudaDeviceCanAccessPeer

    2> MyLib.lib (MyCUDACode.obj): ошибка LNK2001: неразрешенный внешний символ cudaGetDeviceProperties

    2> MyLib.lib (MyCUDACode.obj): ошибка LNK2001: неразрешенный внешний символ cudaSetDevice

    2> MyLib.lib (MyCUDACode.obj): ошибка LNK2001: неразрешенный внешний символ cudaDeviceDisablePeerAccess

    2> MyLib.lib (MyCUDACode.obj): ошибка LNK2001: неразрешенный внешний символ cudaDeviceReset

    2> MyLib.lib (MyCUDACode.obj): ошибка LNK2001: неразрешенный внешний символ cudaDeviceEnablePeerAccess

    2> C: … \ visual studio 2013 \ Projects \ Prj \ x64 \ Release \ MyClient.exe: фатальная ошибка LNK1120: 7 неразрешенных внешних проблем

Я пробовал оба режима выпуска и отладки, но я получаю ту же ошибку.

0

Решение

Я просто воспроизвожу шаги по устранению ошибок:

  • Чтобы устранить ошибку (временное решение): MSB3191: Невозможно создать каталог. Формат указанного пути не поддерживается., Просто скопируйте Cuda cu и cuh файлы в папку проекта Visual Studio.
  • [ОБНОВИТЬ]: Недавно я нашел лучшее решение для этой проблемы MSB3191: Невозможно создать каталог. Формат указанного пути не поддерживается.. Это исправление работает без необходимости перемещения файлов cu в папку проекта VS. Для этого откройте файл «C: \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V120 \ BuildCustomizations \ CUDA 6.5.targets», и перейдите на линию обидчика (в данном случае 412). Эта строка содержит следующий раздел xml:

    <MakeDir
    Condition="'%(CudaCompile.ExcludedFromBuild)' != 'true'"Directories="%(CudaCompile.DepsOutputDir)" />
    

    Как вы можете видеть, это своего рода директива, которая указывает системе сборки создать папку для компилируемых файлов cuda. Для имени папки используется свойство CudaCompile.DepsOutputDir. Теперь откройте файл: «C: \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V120 \ BuildCustomizations \ CUDA 6.5.props». Этот реквизитный файл определяет значения свойств, используемых в целевом файле. Теперь поиск по слову DepsOutputDirв этом файле реквизита. Есть только раздел XML, который определяет и ссылается на это ключевое слово:

        <!-- Miscellaneous -->
    <DepsOutputFile>%(Filename)%(Extension).deps</DepsOutputFile>
    <DepsOutputDir>$(IntDir)%(RelativeDir)</DepsOutputDir>
    <DepsOutputPath>%(DepsOutputDir)%(DepsOutputFile)</DepsOutputPath>
    

    Теперь, чтобы окончательно исправить проблему MSB3191, просто удалите переменную % (RelativeDir) сверху раздел xml и сохраните файл props (для этого потребуются права администратора)

  • Чтобы устранить ошибку: LNK2001: неразрешенный внешний символ, следовать Настройки для линкера раздел в этом сообщение

4

Другие решения


По вопросам рекламы [email protected]