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.cmd5_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 特定的函数,例如 RpcServerRegisterIfRpcServerUseProtseqEp,我都有相同的错误。我正在使用 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的主要内容,如果未能解决你的问题,请参考以下文章

错误 LNK2019:未解析的外部符号 opencv

Visual Studio 2019 CVT1101 & LNK1123 致命错误

错误 LNK2019:matlab 中未解析的外部符号

Qt Creator 链接器错误:LNK1104:无法打开 fil 'usb-1.0.lib' - Windows

LNK2019 错误:在 x64 机器上使用 x86 库 [重复]

C 中的 Windows 套接字编程