天天看點

使用thrift大量編譯警告消息方法

<a href="http://https//issues.apache.org/jira/browse/THRIFT-1824" target="_blank">https://issues.apache.org/jira/browse/THRIFT-1824</a>

背景:

當在使用thrift時,如果我們的代碼也采用automake方式編譯,這樣就存在config.h檔案沖突,原因是thrift的Thread.h檔案include它時,沒有目錄修飾。

config.h:

在成功編譯thrift後,會在它的thrift目錄下生成一個config.h檔案,這個檔案實際是由automake産生的,如下所示 :

&gt; ls thrift

async        config.h   protocol  server                   TDispatchProcessor.h  TLogging.h    transport

concurrency  processor  qt        TApplicationException.h  Thrift.h              TProcessor.h  TReflectionLocal.h

concurrency/Thread.h:

在Thread.h頭檔案中會包含這個頭檔案,遺憾的是Thread.h是對外的公共檔案,也就是使用thrift會直接看到它,而config.h被include時,未加任何目錄修飾,這就是收到大量編譯警告的原因。

#ifdef HAVE_CONFIG_H

#include

#endif

ERROR MESSAGE:

隻需要将Thread.h中的#include 注釋掉,下面的大量編譯警告即可消息,而且thrift編譯也沒有問題。

make[2]: Entering directory `@_@'

if g++ -DHAVE_CONFIG_H -I. -I. -I../.. -I../.. -I../../../third-party/boost/include -I../../../third-party/thrift/include -I../../../third-party/sqlite/include -I../../../third-party/gflags/include -I../../../third-party/glog/include -I../../../third-party/libevent/include -I../../../third-party/mysql/include    -D_GNU_SOURCE -rdynamic -Wall -fPIC -g -MT ExecutorService_server.skeleton.o -MD -MP -MF ".deps/ExecutorService_server.skeleton.Tpo" -c -o ExecutorService_server.skeleton.o `test -f './ExecutorService_server.skeleton.cpp' || echo './'`./ExecutorService_server.skeleton.cpp; \

then mv -f ".deps/ExecutorService_server.skeleton.Tpo" ".deps/ExecutorService_server.skeleton.Po"; else rm -f ".deps/ExecutorService_server.skeleton.Tpo"; exit 1; fi

In file included from ../../../third-party/thrift/include/thrift/concurrency/Thread.h:28,

                 from ../../../third-party/thrift/include/thrift/server/TServer.h:26,

                 from ../../../third-party/thrift/include/thrift/server/TSimpleServer.h:23,

                 from ./ExecutorService_server.skeleton.cpp:6:

../../config.h:44:1: warning: "PACKAGE" redefined

In file included from ../../../third-party/thrift/include/thrift/TLogging.h:24,

                 from ../../../third-party/thrift/include/thrift/Thrift.h:51,

                 from ../../../third-party/thrift/include/thrift/transport/TTransport.h:23,

                 from ../../../third-party/thrift/include/thrift/protocol/TProtocol.h:23,

                 from ../../../third-party/thrift/include/thrift/TProcessor.h:24,

                 from ../../../third-party/thrift/include/thrift/TDispatchProcessor.h:22,

                 from ./ExecutorService.h:10,

                 from ./ExecutorService_server.skeleton.cpp:4:

../../../third-party/thrift/include/thrift/config.h:263:1: warning: this is the location of the previous definition

../../config.h:47:1: warning: "PACKAGE_BUGREPORT" redefined

../../../third-party/thrift/include/thrift/config.h:266:1: warning: this is the location of the previous definition

../../config.h:50:1: warning: "PACKAGE_NAME" redefined

../../../third-party/thrift/include/thrift/config.h:269:1: warning: this is the location of the previous definition

../../config.h:53:1: warning: "PACKAGE_STRING" redefined

../../../third-party/thrift/include/thrift/config.h:272:1: warning: this is the location of the previous definition

../../config.h:56:1: warning: "PACKAGE_TARNAME" redefined

../../../third-party/thrift/include/thrift/config.h:275:1: warning: this is the location of the previous definition

../../config.h:59:1: warning: "PACKAGE_VERSION" redefined

../../../third-party/thrift/include/thrift/config.h:281:1: warning: this is the location of the previous definition

../../config.h:65:1: warning: "VERSION" redefined

../../../third-party/thrift/include/thrift/config.h:327:1: warning: this is the location of the previous definition

繼續閱讀