Visual studio 14.0 LNK2001(未解析的外部符号)与 OpenCL
Visual studio 14.0 LNK2001 (unresolved external symbol ) with OpenCL
我是 OpenCL 的新手。当我尝试从Altera网站上的例子时,我得到了几个LNK2001错误如下
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
我已经添加了库和头文件的路径。我对这些错误感到困惑。我能做些什么来解决这个问题?
----------------------------更新---------------- --------------
好的,正如 Hadi Brais 所说,我将其添加到附加依赖项中。所有旧错误都消失了。但是又来了一个新的。
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++ 构建的。这很混乱。有人知道如何处理这个吗?非常感谢!!!
更新:
根据中的讨论,这个问题是由VS2015中stdin/stdout/stderr的重新定义引起的,而Altera OpenCL库是用VS2010构建的。函数调用的未匹配导致它在链接阶段失败。
可以包含 legacy_stdio_definitions.lib 以解决 __imp_vfprintf 链接问题,但不能包含 __imp__iob_func。
根据与一位 MS 工程师的讨论,有两种方法可以解决这个问题:1. 将库 ps 编码为一个 DLL,该 DLL 与阿泰拉。 2. 等待 Altera 发布更新的库。
希望对您有所帮助。
只想跟进您的问题。
您 运行 正在使用 Visual Studio 2015 进行 Altera OpenCL 设计吗?
我收到与您提到的相同的错误。你修好了吗? Thx(ps:似乎相同的设计可以 运行 与 VS2013 但在 VS2015 上失败)
要使在VS2015下构建的项目正常运行,需要2个步骤。我使用 VS2010 vector_add
项目转换为 VS2015,所有 AOCL
任务包含在 *.vcxproj 生成编译和 link 配置中。
1.构建主机可执行文件
在 VS2015 中添加到链接器 -> 输入 -> 附加依赖项:
OpenCL.lib
legacy_stdio_definitions.lib
在此阶段,您应该能够 运行 托管可执行文件,但不会检测到 Altera 平台。
2。将 Altera OpenCL 平台添加到 Windows 以便可以通过以下方式查询
任何 OpenCL SDK
从 "Altera SDK for OpenCL Programming Guide" 关注 "Linking to the ICD Loader Library on Windows":
特别是第 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 中(注意:由于某些原因 %ALTERAOCLSSDKROOT% 对我不起作用,所以路径是硬编码的):
C:\altera.0\hld\bin;C:\altera.0\hld\host\windows64\bin
.
我建议首先让它与简单的 Altera 示例项目一起工作,即 "vector_add"。
我是 OpenCL 的新手。当我尝试从Altera网站上的例子时,我得到了几个LNK2001错误如下
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
我已经添加了库和头文件的路径。我对这些错误感到困惑。我能做些什么来解决这个问题?
----------------------------更新---------------- --------------
好的,正如 Hadi Brais 所说,我将其添加到附加依赖项中。所有旧错误都消失了。但是又来了一个新的。
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++ 构建的。这很混乱。有人知道如何处理这个吗?非常感谢!!!
更新:
根据
可以包含 legacy_stdio_definitions.lib 以解决 __imp_vfprintf 链接问题,但不能包含 __imp__iob_func。
根据与一位 MS 工程师的讨论,有两种方法可以解决这个问题:1. 将库 ps 编码为一个 DLL,该 DLL 与阿泰拉。 2. 等待 Altera 发布更新的库。
希望对您有所帮助。
只想跟进您的问题。 您 运行 正在使用 Visual Studio 2015 进行 Altera OpenCL 设计吗? 我收到与您提到的相同的错误。你修好了吗? Thx(ps:似乎相同的设计可以 运行 与 VS2013 但在 VS2015 上失败)
要使在VS2015下构建的项目正常运行,需要2个步骤。我使用 VS2010 vector_add
项目转换为 VS2015,所有 AOCL
任务包含在 *.vcxproj 生成编译和 link 配置中。
1.构建主机可执行文件
在 VS2015 中添加到链接器 -> 输入 -> 附加依赖项:
OpenCL.lib
legacy_stdio_definitions.lib
在此阶段,您应该能够 运行 托管可执行文件,但不会检测到 Altera 平台。
2。将 Altera OpenCL 平台添加到 Windows 以便可以通过以下方式查询 任何 OpenCL SDK
从 "Altera SDK for OpenCL Programming Guide" 关注 "Linking to the ICD Loader Library on Windows":
特别是第 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 中(注意:由于某些原因 %ALTERAOCLSSDKROOT% 对我不起作用,所以路径是硬编码的):
C:\altera.0\hld\bin;C:\altera.0\hld\host\windows64\bin
.
我建议首先让它与简单的 Altera 示例项目一起工作,即 "vector_add"。