关闭

关于预编译头 protocol buffer 命名空间的问题

25人阅读 评论(0) 收藏 举报
分类:

最近在项目中碰到一些问题,在引入protocol buffer的时候,总是报命名空间被忽略的问题,还有莫名其妙的重定义的问题.折腾了好久 终于解决了. 现在 分享下我解决问题的步骤.
首先 说下预编译头 预编译头的概念:
所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的C/C++代码 甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。注意生成预编译头文件是很耗时间的.同时你得注意预编译头文件通常很大,通常有6-7M大。注意及时清理那些没有用的预编译头文件.
项目中碰到的问题 : 预编译头没有及时清理导致编译出错.我在碰到编译不能通过的情况下(新引入protocol) 将文件逐个编译(vs CTRL+F7) 第一次没有通过 将预编译头清掉(清理解决方案就可以了) 又编译一次 这次文件编译通过了 但项目整个编译没有通过 估计是protocol的问题
现在说下protocol
protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域.
我发现出现问题很大一部分原因是头文件的包含顺序问题 于是我将protocol的头文件放在最前面 引用的头文件也放在最前面 项目编译的时候 部分错误解决 但仍旧不能完成编译
我觉得现在还是头文件的问题 于是我将stdafx.h中包含的头文件注释掉 这时候所有的文件编译完成 链接时提示 __iob_func在文件中重定义 于是我设置强制输出/FORCE:MULTIPLE https://msdn.microsoft.com/zh-cn/library/70abkas3.aspx
编译通过 但总觉得解决方案不够完美
后来考虑在预编译头中加入protocol的头文件 并将其放在最前面 将之间stdafx.h中注释掉的头文件放开 编译通过
ps: __iob_func 重定义是因为之前的库是用vs2010编译的 今天用vs2015编译了一下 好了

引用
http://blog.csdn.net/huapeng_guo/article/details/7663723

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3818次
    • 积分:79
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:4条
    文章分类
    文章存档
    最新评论