2013-02-16 2 views
2

я получаю следующее сообщение об ошибке при попытке построить код CUDA/C++ в Visual Studio 2012. Я использую CUDA v5.0Linker ошибка при построении CUDA/C++ код

1> Generating Code... 
1>LINK : warning LNK4044: unrecognized option '/MLd'; ignored 
1>cublas_device.lib(kepler_sm35_gemm_wrapper.obj) : error LNK2019: unresolved external symbol __cudaRegisterLinkedBinary_59_tmpxft_00001040_00000000_8_kepler_sm35_gemm_wrapper_cpp1_ii_9402ff4f referenced in function "void __cdecl __sti____cudaRegisterAll_59_tmpxft_00001040_00000000_8_kepler_sm35_gemm_wrapper_cpp1_ii_9402ff4f(void)" (?__sti____cudaRegisterAll_59_tmpxf[email protected]@YAXXZ) 

Кто-нибудь имеет любую идею где проблема может быть? Я пробовал искать походы, но пока не нашел решения для этого.

Большое спасибо!

+0

Аналогичный пост http://stackoverflow.com/questions/2061715, вы пробовали это решение? – StarPinkER

+0

Привет, Jermaine, Да, у меня есть правильный путь библиотеки CUDA, добавленный в «Свойства конфигурации -> Linker-> Input», и я все еще получаю эту ошибку. Фактически, cublas_device.lib (файл с нерешенным внешним символом) сам по себе является частью библиотеки CUDA, поэтому мой компоновщик может правильно найти эти файлы библиотек. Я думаю, что этот файл библиотеки ссылается на то, что не находит компоновщик. Кроме того, это происходит только тогда, когда моя платформа настройки Visual Studio является «Debug». Когда это «Release», исполняемый файл строит правильно. – assassin

+0

Хорошо, попробуйте эти две вещи: сначала добавьте cudart.lib, если вы этого еще не сделали, но, возможно, вы это сделали.second: попробуйте включить отдельную компиляцию в свойствах вашего приложения -> параметры компоновщика. Посмотрите, поможет ли это. (EDIT: также попробуйте удалить device-link.obj, как описано [здесь] (https://devtalk.nvidia.com/default/topic/525616/cuda-programming-and-performance/question-about-___cudaregisterlinkedbinary-referenced- in-function -____ cudaregisterall /) –

ответ

0

Я смог исправить это! Я связывался с cublas_device.lib, который имел в виду неразрешенный внешний символ. Однако этот файл lib не был нужен моему проекту, поэтому просто удалить его из связанных файлов! Однако в режиме Release эта ошибка не происходила - возможно, потому, что эта часть кода в cublas_device.lib находилась в разделе отладки.

В любом случае, поскольку это не требуется моим проектом, его устранение устраняет проблему.

Большое спасибо за все ваши ответы!

2

This article показывает информацию о том, что делает опция link/linkd. По сути, это связано с загрузкой многопоточных библиотек и конфигурацией вашего проекта.

0

Похоже, что используется внешняя (внешняя) переменная, которая не определена. Код необходим для получения дополнительной информации.

1

Вам необходимо установить ссылку на отладочную версию библиотеки CUDA. Вы пытаетесь скомпилировать в режиме Debug, но затем вы связываетесь с библиотекой, которая, кажется, не была построена в режиме debug. Таким образом, это все испортилось.

Поэтому вы должны либо получить файл .lib для отладочной версии, либо создать его самостоятельно, если у вас есть исходный код. Затем вы связываете свою сборку отладки с debug .lib и то же самое для выпуска.

Кроме того, это может помочь вам использовать ту же версию компилятора для сборки всех lib s, иначе вы можете столкнуться с проблемами смены имени (что также может стать потенциальной причиной для вашей проблемы). Это случилось со мной после перехода на новую версию VS: мне пришлось перекомпилировать все .lib, с которыми я связывался.

2

Ваш проект (Debug) настроен для связи с компоновщиком Microsoft или nvcc? (Сообщения об ошибках, по-видимому, поступают от компоновщика microsoft.) Вы можете посмотреть на this question

Код устройства и библиотеки устройств (которые вы связываете) должны быть связаны с nvcc.

0

У меня возникла одна и та же проблема: для меня работала настройка типа конфигурации из «Динамическая библиотека (dll)» в «Статическая библиотека (lib)».

Смежные вопросы