VC 2012编译protobuf的出错处理

近来要学习protobuf的协议生成,需要从网上下载它的代码,从这个SVN地址下载:

http://protobuf.googlecode.com/svn/trunk

下载完成之后,就可以到protobuf\vsprojects目录下找到VC2008的工程文件,然后打开工程进行转换,这个没有问题。但在编译过程里会出现两个问题,第一个问题如下:

1>------ Build started: Project: gtest_main, Configuration: Debug Win32 ------

1> gtest_main.cc

1>e:\protobuf\gtest\include\gtest\gtest-printers.h(556): error C2977: 'std::tuple' : too many template arguments

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\utility(73) : see declaration of 'std::tuple'

1>e:\my\git\protobuf\gtest\include\gtest\gtest-printers.h(564): error C2977: 'std::tuple' : too many template arguments

1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\utility(73) : see declaration of 'std::tuple'

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/vc/

在这里由于使用std::tuple,并且使用的个数达到10个,因此编译提示上面的出错。只需要把std;;tuple里的个数定义为10个即可。更简单的方法是打开“解决方案资源管理器”,右键打开项目“属性”,在C/C++ --> “预处理器”--> “预处理定义”中增加以下行即可:

_VARIADIC_MAX=10

在VC2012里_VARIADIC_MAX默认定义为5,因此不支持5个以上的参数输入,而导致出错。当然这样修改之后,编译时会多占用一点内存。

第二个问题如下:

3>------ Build started: Project: lite-test, Configuration: Debug Win32 ------

2>test_plugin.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/SAFESEH' specification

2>gtestd.lib(gtest-all.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in test_plugin.obj

3> lite-test.vcxproj -> E:\protobuf\vsprojects\Debug\lite-test.exe

2>msvcprtd.lib(MSVCP110D.dll) : error LNK2005: "public: __thiscall std::_Container_base12::_Container_base12(void)" (??0_Container_base12@std@@QAE@XZ) already defined in gtestd.lib(gtest-all.obj)

出现这个问题原因是工程在转换过程中,会有一些工程使用MD编译选项,有一些工程使用MTD编译选项,导致静态和动态连接MSVC的连接库有冲突。默认全部工程改变MT或MTD编译,即可以解决。

时间: 2024-10-28 07:29:03

VC 2012编译protobuf的出错处理的相关文章

vc++-VC++2008到VC++2012升级的问题

问题描述 VC++2008到VC++2012升级的问题 我的项目中用到一个类叫auto,升级以后发现auto成了关键字了,真是晕死了,不想修改这个类名了,请问还有什么办法对它转义? 解决方案 auto本来就是关键字,你确认你VC++2008能编译? 解决方案二: auto不是关键字也是保留字,你可以改一下大小写吗,或者看看能否在你的类声明前加上 ifdefine/undefine掉auto 解决方案三: 如果升级到 2012 后不信 auto 关键字,可以考虑自己宏定义一个 auto 关键字为空

为什么这个代码运行的时候不报错,但是对方计算机收不到消息?请问是VC++没有编译么?

问题描述 为什么这个代码运行的时候不报错,但是对方计算机收不到消息?请问是VC++没有编译么? 为什么这个代码运行的时候不报错,但是对方计算机收不到消息?请问是VC++没有编译么? 解决方案 哪里来的程序,什么代码.有没有说明文档,是不是防火墙限制了. 解决方案二: 你的代码发送的消息是否正确发送过去了,是否有收到

编码-ffmeg可以在VC下编译么?

问题描述 ffmeg可以在VC下编译么? x264编码完成 想用ffmeg解码,下了ffmeg摘出来的视频解码 不知道怎么编译 解决方案 你需要一个类似的东东:ffmpeg VC工程~

vc++出现编译问题,急求大神们

问题描述 vc++出现编译问题,急求大神们 在vc++6.0在创建时显示出现如下错误:G:VCVC安装Microsoft Visual StudioMyProjects122122.rc(11) : 致命错误 RC1015: 无法打开包含文件 'afxres.h'. 执行 rc.exe 时出错. 在使用打开文件功能时,也会发生闪退,安装过多个安装包,结果都一样,急求帅气大神啊~ 解决方案 你是不是在visual studio express版啊,afxres.h是mfc的头文件,express不

g++ c++-g++中一段代码在VC++中编译出现问题

问题描述 g++中一段代码在VC++中编译出现问题 出错代码如下: #ifdef OLD_LIBC friend istream & operator>>(istream &s, Matrix &A); #else // template friend istream & operator>><>(istream &s, Matrix &A); #endif *源程序是g++中的开源程序,在Mingw中编译可以通过,而在V

Visual Studio 2012 编译错误【error C4996: &amp;#39;scanf&amp;#39;: This function or variable may be unsafe. 】的解决方案

#include "stdafx.h" #include "stdio.h" void main() { int n,x,y; printf("请输入n和x的值\n"); scanf("%d %d",&n,&x); y=n+x; printf("最后的结果是:%d\n",y); } 编译显示有错: error C4996: 'scanf': This function or variable

VC++程序编译链接的原理与过程

我们在EX10这个工程中,选择菜单中「Build」→「Rebuild All」,重新编译所有的工程文件,可以看到如下输出:     从这个输出中,我们可以看到可执行程序EX10.exe的产生,经过了两个步骤:首先,C++编译器对工程中的三个源文件fish.cpp.animal.cpp单独进行编译(Compiling-).在编译时,先由预处理器对预处理指令(#include.#define和#if)进行处理,在内存中输出翻译单元(一种临时文件).编译器接受预处理的输出,将源代码转换成包含机器语言指

windows编译Protobuf

首先运行根目录下的autogen.sh,3主要是下载gmock,2主要是下载gtest.如果下载不能,那么就会失败,那就另想办法下载源码包解压缩到根目录的gmock下即可.如果是3的话,3使用了cmake,那么接着运行CMake的UI配置生成VS的工程文件,最低支持VS2005.如果是2的话,直接就给的是vs2005的工程文件,2.4.1以上的版本最低支持vs2005,如果要用vs2005之下的版本,那就要使用2.4.1和更低的版本.

protobuf在vxworks下编译

问题描述 protobuf在vxworks下编译 有没有大神弄过,在vxworks下编译protobuf!!!! 解决方案 编译 protobufvxworks 编译-- GNULEubuntu下编译protobuf 解决方案二: https://groups.google.com/forum/#!topic/protobuf/7knJAh5Ay28