【问题标题】:Link Errors for NanoMsg with VS2017NanoMsg 与 VS2017 的链接错误
【发布时间】:2018-06-20 20:23:15
【问题描述】:

我正在尝试在 windows 盒子上构建 nanomsg 下一代 (https://github.com/nanomsg/nng)。我正在使用 VS2017。 CMAKE 就像一个魅力。

我收到链接错误。我已验证 nng.lib 文件位于:

D:\Source\LinkWareMessageBus\nng\lib

Dumbin.exe 表示符号全部到位(并且没有编译或链接错误)

链接器/常规/附加库目录为:D:\Source\LinkWareMessageBus\nng\lib

.h 文件可以正常读取。但我收到以下链接错误:

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2019 unresolved external symbol __imp__nng_setopt referenced in function "int __cdecl client(char const *,char const *)" (?client@@YAHPBD0@Z)    LinkWareMessageBus  D:\Source\LinkWareMessageBus\LinkWareMessageBus.obj 1   
Error   LNK2019 unresolved external symbol __imp__nng_listen referenced in function "int __cdecl server(char const *)" (?server@@YAHPBD@Z)  LinkWareMessageBus  D:\Source\LinkWareMessageBus\LinkWareMessageBus.obj 1   
Error   LNK2019 unresolved external symbol __imp__nng_dial referenced in function "int __cdecl client(char const *,char const *)" (?client@@YAHPBD0@Z)  LinkWareMessageBus  D:\Source\LinkWareMessageBus\LinkWareMessageBus.obj 1   
Error   LNK2019 unresolved external symbol __imp__nng_strerror referenced in function "void __cdecl fatal(char const *,int)" (?fatal@@YAXPBDH@Z)    LinkWareMessageBus  D:\Source\LinkWareMessageBus\LinkWareMessageBus.obj 1   
Error   LNK2019 unresolved external symbol __imp__nng_send referenced in function "int __cdecl server(char const *)" (?server@@YAHPBD@Z)    LinkWareMessageBus  D:\Source\LinkWareMessageBus\LinkWareMessageBus.obj 1   
Error   LNK2019 unresolved external symbol __imp__nng_recv referenced in function "int __cdecl client(char const *,char const *)" (?client@@YAHPBD0@Z)  LinkWareMessageBus  D:\Source\LinkWareMessageBus\LinkWareMessageBus.obj 1   
Error   LNK2019 unresolved external symbol __imp__nng_free referenced in function "int __cdecl client(char const *,char const *)" (?client@@YAHPBD0@Z)  LinkWareMessageBus  D:\Source\LinkWareMessageBus\LinkWareMessageBus.obj 1   
Error   LNK2019 unresolved external symbol __imp__nng_pub0_open referenced in function "int __cdecl server(char const *)" (?server@@YAHPBD@Z)   LinkWareMessageBus  D:\Source\LinkWareMessageBus\LinkWareMessageBus.obj 1   
Error   LNK2019 unresolved external symbol __imp__nng_sub0_open referenced in function "int __cdecl client(char const *,char const *)" (?client@@YAHPBD0@Z) LinkWareMessageBus  D:\Source\LinkWareMessageBus\LinkWareMessageBus.obj 1   

这些是我的 VS2017 设置(x64 .lib 和 x64 项目)。

我还在 nng.lib 文件中附加了符号的转储。

我怀疑是没有正确配置 VS2017 来查找 .lib(除了添加链接器/附加库的路径)我该怎么办?

nng.lib symbols


更新

我不再说这很简单。但我确实走得更远,也许你可以帮助越过终点线。即使我告诉 VS2017 在哪里可以找到 nng.lib(路径和名称)。我也尝试将它与 kernel32.lib user32.lib 和其他强制库一起放入。

好的。我现在不再收到有关 nng_xxxx 符号的错误。相反,它现在抱怨的是 nng.lib 正在寻找的符号。

见下文:

这是来自 VS2017 的链接的详细日志的链接: verbose link log

```

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2019 unresolved external symbol __imp_WSARecvFrom referenced in function nni_win_udp_sysfini LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_udp.c.obj) 1   
Error   LNK2019 unresolved external symbol __imp_WSACleanup referenced in function nni_plat_fini    LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_thread.c.obj)  1   
Error   LNK2001 unresolved external symbol __imp_WSACleanup LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_tcp.c.obj) 1   
Error   LNK2001 unresolved external symbol __imp_WSACleanup LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_udp.c.obj) 1   
Error   LNK2019 unresolved external symbol __imp_bind referenced in function nni_win_tcp_sysfini    LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_tcp.c.obj) 1   
Error   LNK2001 unresolved external symbol __imp_bind   LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_udp.c.obj) 1   
Error   LNK2001 unresolved external symbol __imp_bind   LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_pipe.c.obj)    1   
Error   LNK2019 unresolved external symbol __imp_closesocket referenced in function nni_plat_tcp_ep_init    LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_tcp.c.obj) 1   
Error   LNK2001 unresolved external symbol __imp_closesocket    LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_udp.c.obj) 1   
Error   LNK2001 unresolved external symbol __imp_closesocket    LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_pipe.c.obj)    1   
Error   LNK2019 unresolved external symbol __imp_getsockname referenced in function nni_win_tcp_sysfini LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_tcp.c.obj) 1   
Error   LNK2001 unresolved external symbol __imp_getsockname    LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_udp.c.obj) 1   
Error   LNK2001 unresolved external symbol __imp_getsockname    LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_pipe.c.obj)    1   
Error   LNK2019 unresolved external symbol __imp_listen referenced in function nni_win_tcp_listen   LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_tcp.c.obj) 1   
Error   LNK2001 unresolved external symbol __imp_listen LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_pipe.c.obj)    1   
Error   LNK2019 unresolved external symbol __imp_setsockopt referenced in function nni_plat_tcp_pipe_set_nodelay    LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_tcp.c.obj) 1   
Error   LNK2001 unresolved external symbol __imp_setsockopt LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_udp.c.obj) 1   
Error   LNK2001 unresolved external symbol __imp_setsockopt LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_pipe.c.obj)    1   
Error   LNK2019 unresolved external symbol __imp_socket referenced in function nni_plat_tcp_ep_init LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_tcp.c.obj) 1   
Error   LNK2001 unresolved external symbol __imp_socket LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_udp.c.obj) 1   
Error   LNK2001 unresolved external symbol __imp_socket LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_pipe.c.obj)    1   
Error   LNK2019 unresolved external symbol __imp_WSAStartup referenced in function nni_win_tcp_sysinit  LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_tcp.c.obj) 1   
Error   LNK2001 unresolved external symbol __imp_WSAStartup LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_udp.c.obj) 1   
Error   LNK2019 unresolved external symbol __imp_WSAGetLastError referenced in function nni_plat_tcp_pipe_set_nodelay   LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_tcp.c.obj) 1   
Error   LNK2019 unresolved external symbol __imp_WSAIoctl referenced in function nni_plat_tcp_ep_init   LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_tcp.c.obj) 1   
Error   LNK2019 unresolved external symbol __imp_WSARecv referenced in function nni_win_tcp_sysfini LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_tcp.c.obj) 1   
Error   LNK2019 unresolved external symbol __imp_WSASend referenced in function nni_win_tcp_sysfini LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_tcp.c.obj) 1   
Error   LNK2019 unresolved external symbol inet_ntop referenced in function nni_plat_tcp_ntop   LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_tcp.c.obj) 1   
Error   LNK2019 unresolved external symbol __imp_WSASendTo referenced in function nni_win_udp_sysfini   LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_udp.c.obj) 1   
Error   LNK2019 unresolved external symbol __imp_htons referenced in function resolv_ip LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_resolv.c.obj)  1   
Error   LNK2019 unresolved external symbol __imp_getaddrinfo referenced in function resolv_task LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_resolv.c.obj)  1   
Error   LNK2019 unresolved external symbol __imp_freeaddrinfo referenced in function resolv_task    LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_resolv.c.obj)  1   
Error   LNK2019 unresolved external symbol __imp_accept referenced in function nni_plat_pipe_open   LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_pipe.c.obj)    1   
Error   LNK2019 unresolved external symbol __imp_connect referenced in function nni_plat_pipe_open  LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_pipe.c.obj)    1   
Error   LNK2019 unresolved external symbol __imp_ioctlsocket referenced in function nni_plat_pipe_open  LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_pipe.c.obj)    1   
Error   LNK2019 unresolved external symbol __imp_htonl referenced in function nni_plat_pipe_open    LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_pipe.c.obj)    1   
Error   LNK2019 unresolved external symbol __imp_recv referenced in function nni_plat_pipe_clear    LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_pipe.c.obj)    1   
Error   LNK2019 unresolved external symbol __imp_send referenced in function nni_plat_pipe_raise    LinkWareMessageBus  D:\Source\LinkWareMessageBus\nng.lib(win_pipe.c.obj)    1   
Error   LNK1120 24 unresolved externals LinkWareMessageBus  D:\Source\LinkWareMessageBus\x64\Debug\LinkWareMessageBus.exe   1   

```

【问题讨论】:

  • 您添加了目录,但您是否将库添加到链接器?
  • 告诉我为什么我必须将 nng.lib 填充到:C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17134.0\um\x64 我检查了所有安全性在该路径和文件上,它是完全访问权限。那么为什么需要将其推送到 Windows 工具包中呢?
  • 如果你把它放在那里时它可以工作,但你以前没有它,我怀疑你的项目设置有问题。
  • @TriskalJM 更正:不要使用导入库道具。将其添加到依赖项列表中:kernel32 等。请在其他库中添加文件夹的路径。链接将在您的附加库路径中找到它。

标签: visual-studio visual-studio-2017 nanomsg


【解决方案1】:

您要查找的符号(基于更新)是 ws2_32.lib 中的 Winsock 函数。

【讨论】:

  • 实际上我从 gdamore 那里得到了一个答案,我至少需要三个:ws2_32 mswsock advapi32 - 这解决了我的链接问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
相关资源
最近更新 更多