0

.lib および .dll の protobuf ソース コード (2.4.1) をコンパイルするのに多くの問題があります。readme の google の命令に一語一句従いましたが、gtest には重大なエラーがあります。libprotobuf.lib、libprotobuf-lite.lib、および libprotoc.lib を取得しましたが、gtest が失敗しても問題はありませんか? また、libprotobuf を .dll にコンパイルできますが、libprotobuf-lite.dll と libprotoc.dll の場合、ビルドはエラーで失敗します。

私の質問: msvc++ 2010 Express でのプログラミングに protobuf を使用するにはどうすればよいですか。それを実装している人は他にいますか?

ありがとう。

編集::いくつかのビルドエラー...

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_elementtuple__element (二重アンダースコア) に変更してみました。3回使用しましたが、そのうちの1回はコメントにあります。

その後、デバッグとリリースの両方ですべてが正常にコンパイルされ、すべてのテストが正常に実行されました。

コンパイル中にいくつかの警告が表示されましたが、私が知る限り、それらは意図的なものか、Visual Studio の気まぐれでした。

于 2012-08-26T13:39:45.327 に答える
1

解決策ではないにしても、問題が何であるかを教えてください。gtest ヘッダーの 1 つは、 というクラスを定義していstd::tr1::tuple_elementます。MS はまったく同じ名前の別のクラスを定義しています。これは <utility> ヘッダー ファイルにあります。Googleがそうするのを待つ以外に、これを修正する方法はありません。それは彼らに報告された問題です。

または、事前にコンパイルされた Windows バージョンをダウンロードすることもできます

于 2012-08-10T19:31:03.783 に答える
1

私もこの問題を経験しました。を使っていたのでVisual Studio 2010std::tr1::tuple実際には が定義されています。

README ファイルの「Choosing a TR1 Tuple Library 」セクションを少し読むと、コンパイラ フラグを試す-DGTEST_USE_OWN_TR1_TUPLE=0か、Visual Studio で単純にGTEST_USE_OWN_TR1_TUPLE=0.

このタプルは Visual Studio 2010 で提供される TR1 機能で既に定義されているため、これで問題が解決しました。

于 2013-01-12T01:41:38.387 に答える