关于预编译头 protocol buffer 命名空间的问题
来源:互联网 发布:淘宝千牛怎么开直通车 编辑:程序博客网 时间:2024/05/21 22:28
最近在项目中碰到一些问题,在引入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
- 关于预编译头 protocol buffer 命名空间的问题
- 预编译头的问题
- 关于预编译头
- 关于预编译头
- 关于预编译头
- 关于预编译头
- 关于预编译头
- 关于预编译头
- 预编译头文件的问题
- 预编译头文件的问题
- C++预编译头的问题
- [转]关于预编译头
- 关于预编译头文件
- 关于预编译头文件
- 关于预编译头文件
- 关于预编译头文件
- 关于预编译头文件
- 关于#include "stdafx.h"以及预编译头文件的问题
- linux下使用C++ Json库
- 如何在centOS6.7上安装jdk、mysql、tomcat,以及部署打包成war包的web项目
- C++中函数指针的使用
- ORM之mybatis与hibernate个人理解
- ERROR C2995 使用类 模板 需要 模板 参数列表
- 关于预编译头 protocol buffer 命名空间的问题
- css3的一些学习笔记
- 【java基础】接口的意义及用法!
- DAS/SAN/NAS之区别
- 最终实现混合app仿淘宝app自动识别淘口令 第二篇 从后台转到前台时自动识别剪贴板内容
- ubuntu16.4安装postgresql
- 比较总结线性表的几种主要存储结果
- /verbose:lib让VisualStudio打印更详细的编译错误信息
- Java静态绑定与动态绑定 隐藏 多态