跨平台C++服务器程序开发 (1)了解跨平台开发

跨平台服务器程序的作用

所谓跨平台,主要指Windows和Linux两个主要平台。如今绝大多数服务器后端程序运行在Linux平台,这是因为Linux具有免费、开源、远程操控方便、易于大规模运维管理等优点,相比之下,Windows平台更适用于个人用户的办公和娱乐,因此服务器程序多数要在Linux平台上运行。

但是在开发过程中,大部分开发者更习惯使用Windows平台的Visual Studio(简称VS)集成开发环境,而不习惯Linux平台的开发工具如vim、emacs、eclipse等,虽然说各有喜好,但总体来说还是VS更方便高效,有代码智能提示、查找引用、批量改名、可视化调试等优点。所以从开发效率角度考虑,Visual Studio是最好的开发工具。

所以理想情况下我们既希望使用Windows平台的VS作为开发工具,又希望编写的代码能够在Linux平台编译运行,而满足这两个条件就需要我们开发跨平台的程序,这就是跨平台程序的作用。

跨平台程序实现方法

要实现同一份代码在Windows和Linux平台都编译通过并不难,因为标准c/c++在设计时就是跨平台的,可以写一段最简单的HelloWorld代码分别在VS和gcc环境下编译,肯定能编译通过。

但显然不太可能在项目中只使用c/c++标准库函数,我们还要使用系统api函数,比如创建线程函数,在Windows里是_beginthreadex函数,在Linux里是pthread_create函数,所以在不同平台编译时需要加以区分,这里可以通过预定义宏实现。

通过VS创建项目时,会自动生成WIN32_WIN32两个宏。在编写Linux平台使用的makefile时,我们也可以手动添加一个宏_LINUX用于指定是在Linux平台下编译。

下面为一个跨平台创建线程代码段:

#ifdef WIN32
    HANDLE hThread = (HANDLE)_beginthreadex( ... );
#else
    int result = pthread_create( ... );
#endif

若定义了宏WIN32(Windows平台),使用_beginthreadex函数,否则使用pthread_create函数,这里指的是编译期的处理。

当然我们也可以改用_LINUX宏来做判断,代码如下:

#ifndef _LINUX
    HANDLE hThread = (HANDLE)_beginthreadex( ... );
#else
    int result = pthread_create( ... );
#endif

若没有定义_LINUX宏,表明不是Linux平台。通过宏定义,区分编译期需要编译的代码,以实现跨平台的效果。

开发环境

Windows平台有Visual Studio集成开发环境,搭配svn版本管理工具,基本满足开发需求。

Linux平台用到的主要工具如下:

功能名称
文本编辑器vim
源代码版本管理svn
调试gdb
编译g++
编译脚本cmake
典型的开发流程:
  1. 在VS里编辑代码,并在Windows平台编译调试通过,通过svn上传代码。
  2. 通过远程工具连接Linux,在shell命令行里使用svn更新代码,使用cmake编写编译脚本,并执行代码编译。
  3. 若在Linux下编译报错,找到错误原因后,使用vim修改代码,编译成功后,通过svn上传修改内容。
  4. 若需要在Linux环境下调试,通过gdb关联正在运行的进程,或者直接通过gdb启动调试进程,在命令行下进行调试。

本文讲解了跨平台开发的背景、实现方法、开发环境,希望对大家有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值