游戏服务器是在windows环境开发的,相关跨平台的东西在这里不谈了,只谈如何将Visual Studio 工程转换到Linux下编译。这里涉及到的软件分别为:Centos版本为6.4,Visual Studio 2008,Eclipse cdt。

为了后面的知识容易理解,先简单说下C++编译原理,有四个过程。

1、预处理,通过预处理器(cpp)将宏展开,同时插入include包含的头文件

     $cpp test.cc >test.i

2、编译,将预处理文件编译成汇编文件

     $gcc -s test.i

3、汇编,将汇编代码转换成机器码

     $as -o test.o test.s

4、链接, 链接器将机器码和库文件生成可执行文件。

     $ld -o test test.o

     这个是整个编译过程,只不过在ide环境下,你只需要摁一下F5程序就自动启动了。但后面的细节又有几个人知道呢?由于我所在的项目工程文件非常大,这里提醒下大家尽量少用Visual Studio的虚拟目录。在你构建工程的时候确实用的很高兴。但是用gcc去编译的时候,痛苦不堪,自动生成makefile是根据当前目录CC文件生成makefile的。如果引用外部文件的话,如果在工程里一处引用那也好,可我们工程里一个文件夹,几处引用,并且还要排除掉不用的CC文件,这就需要一个个目录去查看那里引用,把没引用的排除出去。

     上面的编译只是最简单编译单个文件的过程,一个大型项目肯定没这么简单,比如会依赖第三方库,thread,mysql,cryopt,json。。。,还有编译优化级别,是否调试版本。这些对应vs里都有相应可视化配置的地方。但如果你不理解整个编译过程,很容易有遗漏的过程,同时换个新的ide你会很迷茫,这个软件如何下手。但是如果你在gcc下编译个比较大的项目,或者自己写过比较复杂的makefile,无论软件换成啥样,你只要简单看下文档,很快就会对这种ide上手,因为你知道需要添加什么,只要找到地方就可以了。

     这里再看一下gcc几个简单的参数:

     gcc -I/include  -O2 -Wall -g test test.cc -L/lib -lpthread

     1、-I 去相应目录查找头文件

     2、-O2 优化级别为2,对应release版本的优化级别

     3、-Wall 输出所有警告信息

     4、-g 生成gdb可调式执行文件

     5、-L 去对应目录搜索库文件(a 或 so 文件)

     6、-l 包含的库文件

     明白了这些参数的含义,以及编译过程,剩下的事情就是在eclipse里实战了。下篇文章讲述,eclipse编译vs工程的过程和技巧。 

参考:http://www.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html

Centos环境下部署游戏服务器-编译的更多相关文章

  1. Centos环境下部署游戏服务器-软件安装

    这篇文章主要介绍一下游戏服务器需要安装的软件和需要修改的配置.现介绍下项目,本项目服务器端是c++ + mysql组合,客户端是as写的,需要安装的服务为Mysql,Php,Apache, 以及一个n ...

  2. Centos环境下部署游戏服务器-常用命令

         图1     在Linux的世界,如果你不玩命令,那你见了同行都不好意思和人家打招呼.同时服务器正常状况下放在远端,一般都是开ssh登录服务器,相信远程桌面的人很少见吧.这篇文章说说Linu ...

  3. Centos环境下部署游戏服务器-自动化

    计算机是没有智力的,只会接受指令,运行指令,得出结果.因此就算你让它重复做一件事多少次,它也学不会自动去做这件事.对于重复繁琐的事情,做为一个懒惰的程序员,必须告诉机器去做这件事情,然后就行了,而不是 ...

  4. Centos环境下部署游戏服务器-简介

    一.前言      在接触这个操作系统之前我一直使用的是ubuntu和mac os,这次由于游戏是测试版本,没有专业的运维人员去做这件事情,只能我这个稍微懂一点linux的人来做这件事情了.由于涉及到 ...

  5. Centos环境下部署游戏服务器-权限

    部署Web服务器的时候,在"DocumentRoot"指向的根目录新建一个文件夹,然后将网页和资源放在这个文件夹里,通过地址http://192.168.0.100/Res/ind ...

  6. Centos环境下部署游戏服务器-iptables

    简介:   图1        Centos做为服务器级操作系统,防火墙是不可缺少的.防火墙的主要功能为控制进出网络包,防火墙就如小区门卫的工作职责,检查出入小区居民的身份,如果不符合小区门卫管理条例 ...

  7. Centos环境下部署游戏服务器-SVN

    版本控制工具的文章已经被写滥了,所以本篇文章不想介绍如何安装Svn如何可视化操作这些东西.本篇文章讲述我自己对Svn的理解,以及在命令行下操作.为啥不应可视化界面?有两方面的原因,远程登录到服务器都是 ...

  8. Centos环境下部署游戏服务器-SSH

    在这个*nix大行其道的年代,SSH绝对值得你拥有,虽说它的语法真的很简单,可用途相当大.比如说你在登山,突然公司一个电话告诉你服务器出问题了,在登山的过程中,肯定不能背个几公斤的笔记本吧,这个时候只 ...

  9. Centos环境下部署游戏服务器-Eclipse

    一直在想这篇文章该不该写,因为这篇文章更像是教你如何使用一个ide这种文章,毫无价值可言.但思来想去还是应给写.上篇文章主要说了编译原理和过程,这篇文章就是理论联系实际的典范.并且很多工程师一辈子都不 ...

随机推荐

  1. objective-c自学总结(三)---面向对象的封装,继承与多态

    面向对象的三大特性 封装 继承 多态 1.封装: 隐藏属性,方法或实现细节的过程称为封装 信息隐藏,隐藏对象的实现细节,不允许用户看到 将东西包装在一 然后以新的完整形式呈现出来 例如,两种或多种化学 ...

  2. 对C++中高内聚,低耦合原则的理解

    1.C语言是面向过程的语言,采用模块化的设计思想,每个功能划分为一个模块,是以函数为单位的. 2.C++是面向对象的语言,采用类设计的思想,因此C++中的模块是以类为基本单位的. 高内聚,低耦合能够使 ...

  3. Hibernate学习---第五节:普通组件和动态组件

    一.普通组件映射配置 1.创建组件类,代码如下: package learn.hibernate.bean; /** * 组件类 */ public class Phones { private St ...

  4. 判断GPS、网络是否开启

    判断GPS.网络是否开启 1.判断GPS打开与否,没有打开则打开GPS private void initGPS(Context context) { LocationManager location ...

  5. C#委托详解(3):委托的实现方式大全(续)

    接上篇(C#委托详解(2):实现方式大全),本篇继续介绍委托的实现方式. 4.Action<T>和Func<T>委托 使用委托时,除了为每个参数和返回类型定义一个新委托类型之外 ...

  6. 【Subsets】cpp

    题目: Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset ...

  7. 【BZOJ】【2049】【SDOI2008】洞穴勘测 Cave

    LCT 哦……LCT的一道更水的裸题,适合学习access,link,cut等基本操作(其实这三个不是在一个层面上的?不要在意这些细节……) /**************************** ...

  8. Fiddler2汉化版使用说明

    fiddler是一款免费且功能强大的数据包抓取软件,它能够快速的抓取HTTP会话以及支持监视.还可设置断点等诸多实用功能,非常适合计算机工作者们分析数据使用.本文就为大家详细介绍一下fiddler的功 ...

  9. .NET设计模式(19):观察者模式(Observer Pattern)(转)

    概述 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知.如果这样的依赖关系过于紧密,将使软件不能很好地抵御 ...

  10. PHP 路径或URL操作

    echo 'documentroot:'.$_SERVER['DOCUMENT_ROOT'].'<br>'; //根目录,在apache的配置文件里定义:httpd.conf 比如:Doc ...