记Linnux下C++转Windows各种心得

来源:互联网 发布:重庆外包网络推广 编辑:程序博客网 时间:2024/06/15 09:28

Linux下的一个C++写的C/S客户端程序。
为了客户需求,将程序分为了界面部分和后台服务部分。后台服务就是跟远程服务端的各项业务实现,界面部分则是与用户交互
开发工具:Qt5.7+Clion。
Qt画的界面,Clion做的后台,Clion在Linux下确实很好用的,很不错的IDE。
由于是两个进程,自然涉及进程间通信, 由于接口较多,采用了远程函数调用,libjsonrpc-cpp,之所以选用这个框架,是看到它的跨平台,但是事实却没有那么顺利,这个后面再讲。
线程主要用的QRunnable,这个是跨Linux、Windows平台的。另一部分有使用pthread,这个只有Linux可以用。
解析xml用的libxml2,这个有源码,可以在不同平台自己编译,也是跨平台了。
网络编程采用的epoll框架。这个只用于linux。

下面转Windows,开发环境:Qt5.7+msvc2015
1、Qt界面部分,完全迁移。
2、解析xml部分,网上下到的编译好的libxml2库文件,可以直接调用。
3、rpc部分,libjsonrpc-cpp,这个所谓的跨平台的框架,也从网上找到了windows版库文件,但是却没有那么顺利。在编译的时候,一直报链接错误,undefined reference to `_imp___ZN7QString11shared_nullE’,等等。
查找了两天,Qt链接动态库的相关文档博客,尝试了各种链接动态库的方法,无果。
那么是为什么呢?
答案就是,libjsonrp-cpp,所谓的跨平台,实际上是在windows上搭建mingw等linux虚拟环境,采用gcc编译的,而我现在用的msvc的编译器,两种编译器的函数导出命名规则不同,所以就不能找到对应的函数名。为了印证我的猜想,用gcc编译链接,完全没问题。
哎、道理就是这么简单,却让我查了好几久的Qt链接库的帖子。
没办法,我的程序还需要调用别人(其他单位)的接口文件,人家的接口肯定是vc编译的,所以我只能选择VC编译器编译,放弃Mingw。那jsonrpc就调用不起来了。然后查找gcc函数名转vc函数名的方法,确实有这样的帖子,但是帖子介绍的方法,是通过自己一个一个修改函数名的方式,而且过程以很复杂,所以我没有尝试,最终放弃了libjsonrpc这个所谓的跨平台库。选则了windows上的rpc远程过程调用框架,期间也遇到几个问题,以后再慢慢说,总体还是实现了。
4、网络编程部分epoll直接换成sellect,很容易。
这样基本就完成了整个转换。

原创粉丝点击