0

我在为 .lib 和 .dll 编译 protobuf 源代码(2.4.1)时遇到了很多麻烦。我按照谷歌在自述文件中的说明,逐字逐句,但 gtest 有重大错误。虽然,我得到了 libprotobuf.lib、libprotobuf-lite.lib 和 libprotoc.lib,但 gtest 失败重要吗?此外,我可以将 libprotobuf 编译为 .dll,但对于 libprotobuf-lite.dll 和 libprotoc.dll,构建失败并出现错误。

我的问题:我如何仍然使用 protobuf 在 msvc++ 2010 express 中进行编程。还有其他人实现它吗?

谢谢。

编辑:: 一些构建错误...

1>------ Build started: Project: libprotobuf, Configuration: Debug Win32 ------
2>------ Build started: Project: gtest, Configuration: Debug Win32 ------
3>------ Build started: Project: libprotobuf-lite, Configuration: Debug Win32 ------
2>  gtest.cc
3>  zero_copy_stream_impl_lite.cc
1>  zero_copy_stream_impl_lite.cc
2>c:\users\null\desktop\protobuf-2.4.1\protobuf-2.4.1\gtest\include\gtest\internal\gtest-tuple.h(745): error C3855: 'std::tr1::tuple_element': template parameter '_Idx' is incompatible with the declaration
2>c:\users\null\desktop\protobuf-2.4.1\protobuf-2.4.1\gtest\include\gtest\internal\gtest-tuple.h(757): error C2039: 'type' : is not a member of 'std::tr1::tuple_element'
2>          c:\users\null\desktop\protobuf-2.4.1\protobuf-2.4.1\gtest\include\gtest\internal\gtest-tuple.h(742) : see declaration of 'std::tr1::tuple_element'
2>c:\users\null\desktop\protobuf-2.4.1\protobuf-2.4.1\gtest\include\gtest\internal\gtest-tuple.h(757): error C2146: syntax error : missing ',' before identifier 'type'
2>c:\users\null\desktop\protobuf-2.4.1\protobuf-2.4.1\gtest\include\gtest\internal\gtest-tuple.h(757): error C2065: 'type' : undeclared identifier
2>c:\users\null\desktop\protobuf-2.4.1\protobuf-2.4.1\gtest\include\gtest\internal\gtest-tuple.h(761): error C2039: 'type' : is not a member of 'std::tr1::tuple_element'
4

3 回答 3

2

我也有这个。感谢 jahhaj 的指点。我尝试在 gtest-tuple.h 中将 tuple_element 更改tuple__element 双下划线)。它被使用了 3 次,其中一次在评论中。

然后在 Debug 和 Release 中一切都编译得很好,并且所有测试都成功运行。

There were a few warnings that came up during the compilation but as far as I could tell they were either deliberate or vagaries of Visual Studio.

于 2012-08-26T13:39:45.327 回答
1

好吧,我可以告诉你问题是什么,如果不是解决方案。gtest 标头之一是定义一个名为std::tr1::tuple_element. MS 定义了一个同名的不同类,你可以在 <utility> 头文件中找到它。除了等待谷歌这样做之外,我没有看到任何解决此问题的方法。这是已向他们报告的问题。

或者,您可以下载预编译的 Windows 版本

于 2012-08-10T19:31:03.783 回答
1

I experienced this problem as well. Since I was using Visual Studio 2010, std::tr1::tuple is actually defined.

Reading a bit in the README file, section Choosing a TR1 Tuple Library, lead me to trying the compiler flag -DGTEST_USE_OWN_TR1_TUPLE=0 or in Visual Studio would simply be GTEST_USE_OWN_TR1_TUPLE=0.

This solved my issue since this tuple is already defined in the TR1 features provided in Visual Studio 2010.

于 2013-01-12T01:41:38.387 回答