Windows RPC 编程错误:LNK 2019 unresolved external symbol RPCServerListen
Posted
技术标签:
【中文标题】Windows RPC 编程错误:LNK 2019 unresolved external symbol RPCServerListen【英文标题】:Windows RPC programming error: LNK 2019 unresolved external symbol RPCServerListen 【发布时间】:2015-05-04 12:57:56 【问题描述】:我正在学习 C Windows RPC 编程。这是我编写和编译的虚拟 RPC 服务器的源代码:
#include <stdio.h>
#include "md5_h.h"
#include "rpc.h"
#include "rpcndr.h"
int main()
RPC_STATUS status;
status = RpcServerUseProtseqEp(
(RPC_WSTR)("ncacn_ip_tcp"),
RPC_C_PROTSEQ_MAX_REQS_DEFAULT,
(RPC_WSTR)("9191"),
NULL);
if (status) exit(status);
status = RpcServerRegisterIf(
md5_v1_0_c_ifspec,
NULL,
NULL);
if (status) exit(status);
status = RpcServerListen(
1,
RPC_C_LISTEN_MAX_CALLS_DEFAULT,
FALSE);
if (status) exit(status);
return 0;
void __RPC_USER midl_user_free(void* p)
free(p);
void md5(const unsigned char* szMsg)
printf("voila %s\n", szMsg);
midl 文件也可以正确编译。 MIDL 编译按预期生成md5_s.c
和md5_c.c
。如果需要,这里是md5.idl
文件:
[
uuid(D86FBC01-D6A7-4941-9243-07A4EC65E8CB),
version(1.0),
]
interface md5
void md5([in, string] const char* szMsg);
;
在联动阶段会产生以下错误:
LNK2019: unresolved external symbol __imp__RpcServerListen referenced in function main
对于每个 RPC 特定的函数,例如 RpcServerRegisterIf
或 RpcServerUseProtseqEp
,我都有相同的错误。我正在使用 Microsoft Visual Studio 2013。
我认为这是由于缺少包含;但我不知道是哪一个。我尝试包含rpc.h
,没有任何更改。
我是否必须在我的项目中包含生成的md5_s.c
?我试过了,没有解决任何问题。
感谢您的帮助!
【问题讨论】:
【参考方案1】:您需要链接到 Rpcrt4.lib。 如果您使用的是 Visual Studio,请将其添加到项目 -> 属性 -> 配置属性 -> 链接器 -> 输入 -> 附加依赖项中。
【讨论】:
谢谢,这解决了我遇到的问题;但是你到底是怎么想出来的? @philippe 这是一个链接错误。并非所有 .lib 文件都包含在默认列表中。所以有时,您需要添加额外的 .lib 文件。示例:winsock、shell API 等。需要手动添加 .lib 文件。当链接器发出错误时,检查 MSDN 中的页脚注释,它会列出要使用的库文件,在这种情况下为 Rpcrt4.lib。以上是关于Windows RPC 编程错误:LNK 2019 unresolved external symbol RPCServerListen的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2019 CVT1101 & LNK1123 致命错误
Qt Creator 链接器错误:LNK1104:无法打开 fil 'usb-1.0.lib' - Windows