如何将rpcgen生成的服务端与客户端放入同一可执行文件
解决rpcgen存根符号冲突的最简单方法
- 分开编译链接服务端与客户端:rpcgen生成的服务端(如
*_svc.c)和客户端(如*_clnt.c)存根本来就是分别对应服务端和客户端程序的,无需将两者同时包含在同一个编译单元或链接到同一个可执行文件中。- 编译服务端时,仅引入服务端存根文件与业务代码,示例命令:
gcc -o server server.c your_service_svc.c your_service_xdr.c - 编译客户端时,仅引入客户端存根文件与业务代码,示例命令:
gcc -o client client.c your_service_clnt.c your_service_xdr.c
- 编译服务端时,仅引入服务端存根文件与业务代码,示例命令:
- 若需在同一进程中同时使用两端逻辑:使用
rpcgen的-N选项重新生成存根,该选项会给客户端和服务端的符号添加不同前缀以避免冲突。生成命令示例:
生成后的存根中,客户端符号会带有rpcgen -N your_service.xclnt_前缀,服务端符号带有svc_前缀,彻底解决命名冲突问题。
内容的提问来源于stack exchange,提问作者torbatamas
相关产品推荐
相关产品推荐

