2015-07-06 10 views
0

Я новичок в OpenCL. Когда я попытался примеры с сайта Altera, я получил несколько ошибок LNK2001 следующегоVisual studio 14.0 LNK2001 (неразрешенный внешний символ) с OpenCL

Severity Code Description Project File Line 
Error LNK2001 unresolved external symbol __imp_sprintf hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_hal_mmd.obj) 1 
Error LNK2001 unresolved external symbol __imp___iob_func hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_hal_mmd.obj) 1 
Error LNK2001 unresolved external symbol __imp_fprintf hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_hal_mmd.obj) 1 
Error LNK2001 unresolved external symbol __imp_sprintf hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_mem.obj) 1 
Error LNK2001 unresolved external symbol __imp___iob_func hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_offline_hal.obj) 1 
Error LNK2001 unresolved external symbol __imp__set_output_format hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_printf.obj) 1 
Error LNK2001 unresolved external symbol __imp_fprintf hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_profiler.obj) 1 
Error LNK2001 unresolved external symbol __imp_sprintf hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_program.obj) 1 
Error LNK2001 unresolved external symbol __imp___iob_func hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_support.obj) 1 
Error LNK2001 unresolved external symbol __imp_vsprintf hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_support.obj) 1 
Error LNK2001 unresolved external symbol __imp_vsnprintf hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_support.obj) 1 
Error LNK2001 unresolved external symbol __imp_vfprintf hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_support.obj) 1 
Error LNK2001 unresolved external symbol __imp___iob_func hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_threadsupport.obj) 1 
Error LNK1120 8 unresolved externals hello_world C:\Users\S_KW\OpenCL\hello_world\bin\hello_world.exe 1 
Error  IntelliSense: argument of type "void (*)(const char *errinfo, const void *, size_t, void *)" is incompatible with parameter of type "void (__stdcall *)(const char *, const void *, size_t, void *)" hello_world c:\Users\S_KW\OpenCL\hello_world\host\src\main.cpp 145 
Warning LNK4044 unrecognized option '/LC:\Users\S_KW\arrow_c5sockit_bsp\arm32\lib'; ignored hello_world C:\Users\S_KW\OpenCL\hello_world\LINK 1 
Warning LNK4044 unrecognized option '/lalterahalmmd'; ignored hello_world C:\Users\S_KW\OpenCL\hello_world\LINK 1 
Warning LNK4044 unrecognized option '/lalterammdpcie'; ignored hello_world C:\Users\S_KW\OpenCL\hello_world\LINK 1 
Error LNK2001 unresolved external symbol __imp_vsnprintf hello_world C:\Users\S_KW\OpenCL\hello_world\MSVCRT.lib(vsnprintf.obj) 1 
Error LNK2001 unresolved external symbol __imp__vsnprintf hello_world C:\Users\S_KW\OpenCL\hello_world\MSVCRT.lib(vsnprintf.obj) 1 
Error LNK2001 unresolved external symbol __imp___iob_func hello_world C:\Users\S_KW\OpenCL\hello_world\pkg_editor.lib(pkg_editor.obj) 1 
Error LNK2001 unresolved external symbol __imp_fprintf hello_world C:\Users\S_KW\OpenCL\hello_world\pkg_editor.lib(pkg_editor.obj) 1 

Я уже добавлен путь к LIBS и файлы голова. Я смущен этими ошибками. Что я могу сделать, чтобы решить эту проблему?

---------------------------- ОБНОВЛЕНИЕ ----------------- -------------

ОК, как сказал Хади Брайс, я добавил его к дополнительным зависимостям. И все старые ошибки исчезли. Но наступает новая.

Severity Code Description Project File Line 
Error LNK1120 1 unresolved externals hello_world C:\Users\S_KW\OpenCL\hello_world\bin\hello_world.exe 1 
Error LNK2001 unresolved external symbol __imp_sprintf hello_world C:\Users\S_KW\OpenCL\hello_world\OpenCL.lib(icd_windows.obj) 1 
Warning LNK4044 unrecognized option '/LC:\Users\S_KW\arrow_c5sockit_bsp\arm32\lib'; ignored hello_world C:\Users\S_KW\OpenCL\hello_world\LINK 1 
Warning LNK4044 unrecognized option '/lalterahalmmd'; ignored hello_world C:\Users\S_KW\OpenCL\hello_world\LINK 1 
Warning LNK4044 unrecognized option '/lalterammdpcie'; ignored hello_world C:\Users\S_KW\OpenCL\hello_world\LINK 1 

Это как-то связано с OpenCL.lib, я думаю. Кажется, что lib не может видеть функцию printf. Но я думаю, что printf построен на C++. Это сбивает с толку. Кто-то знает, как справиться с этим? Большое спасибо!!!

+0

Укажите, где вы ввели пути к libs и файлам заголовков? Компилятор жалуется на функции CRT, а не на функции OpenCL. –

+0

Я добавил их на страницу свойств. Дополнительно включают каталоги и дополнительные библиотечные каталоги. – Kaiyuan

+0

Этого недостаточно. Вам нужно добавить нужные имена библиотек в 'Linker/Input/Additional Dependencies'. –

ответ

1

Update: в соответствии с обсуждением в this link, эта проблема вызвана повторным определением стандартного ввода/стандартный вывод/STDERR в VS2015, и ЛИЭС Altera OpenCL были построены с VS2010. Матч пропусков вызова функции заставляет его не работать на этапе компоновки.

Legacy_stdio_definitions.lib может быть включен для решения связывания __imp_vfprintf, но не __imp__iob_func.

Согласно одному из обсуждений с инженером MS, есть два способа преодолеть это: 1. инкапсулировать lib в DLL, связанную с тем же CRT, который использовался Altera. 2. дождитесь более новой версии libs из Altera.

Надеюсь, это поможет.


просто хотел бы следить за вашей проблемой. Вы используете проекты Altera OpenCL с Visual Studio 2015? Я получаю ту же ошибку, что и вы упомянули. У вас все еще исправлено? Thx (ps: похоже, тот же дизайн может работать с VS2013, но с ошибкой на VS2015)

+0

Проблема все еще не решена. Теперь я использую только VS для написания кода хоста. Для кода ядра я использую редактор CL для редактирования, а остальная работа использует Altera SDK. – Kaiyuan

+0

@liuyz вы можете увидеть мой ответ на исправление VS2015. – doqtor

+0

@doqtor благодарит за нас, 1-й, это ICD, чтобы исправить __imp__iob_func нерешенную проблему? Второй, на шаге 1, makefile нужно изменить, является ли это одним из make-файла в папке lib? или make-файл для проекта MS? Я не знаю какого-либо make-файла в папке проекта. 3rd, на шаге 2 требуется добавить ключ для каждого возврата lib из команды aocl ldlibs в правильном порядке, какой заказ вы используете? Благодарю. – liuyz

2

Есть 2 шага, чтобы сделать проект, построенный под VS2015. Я использовал VS2010 vector_add проект, преобразованный в VS2015, и все задачи AOCL, включенные в * .vcxproj, генерируют компиляцию и конфигурацию ссылок там.

1. Построить хост исполняемый

В VS2015 добавить в Linker -> Input -> Дополнительные зависимости:

OpenCL.lib 
legacy_stdio_definitions.lib 

На этом этапе вы должны иметь возможность запускать хост исполняемый файл, но платформа Altera будет не обнаруживается.

2.Добавить платформу Altera OpenCL в Windows, так что он может быть запрошен любого OpenCL SDK

Follow «Связывание с МКБ Loader библиотеки в Windows» от «Альтера SDK для OpenCL Руководства по программированию»:

В частности точка 2b говорить о добавлении значений в реестре Windows:

[HKEY_LOCAL_MACHINE\SOFTWARE\Altera\OpenCL\Boards] 
"c:\\board_vendor a\\my_board_mmd.dll"=dword:00000000 

и

[HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors] 
"alteracl_icd.dll"=dword:00000000 

Если платформа Altera OpenCL по-прежнему не найдена, убедитесь, что ниже пути находятся в PATH (обратите внимание: по какой-то причине% ALTERAOCLSDKROOT% не работает для меня, поэтому пути жестко закодированы): C:\altera\15.0\hld\bin;C:\altera\15.0\hld\host\windows64\bin.

Предлагаю сначала сделать работу с простым примером проекта «Альтера», т. Е. «Vector_add».

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

  • Нет связанных вопросов^_^