[ https://issues.apache.org/jira/browse/THRIFT-3099?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14533060#comment-14533060 ]
ASF GitHub Bot commented on THRIFT-3099: ---------------------------------------- Github user marco-m closed the pull request at: https://github.com/apache/thrift/pull/446 > cmake build is broken on FreeBSD > -------------------------------- > > Key: THRIFT-3099 > URL: https://issues.apache.org/jira/browse/THRIFT-3099 > Project: Thrift > Issue Type: Bug > Affects Versions: 1.0 > Environment: FreeBSD/amd64 10.1-STABLE > C++ compiler: FreeBSD clang version 3.4.1 (tags/RELEASE_34/dot1-final 208032) > 20140512 > Boost 1.55.0 > cmake 3.1.3 > Reporter: Marco Molteni > > Cmake build is broken on FreeBSD. > Among the problems: > h4. Building the c_glib tests require to specify the Boost include directory > {noformat} > Building CXX object > lib/c_glib/test/CMakeFiles/testgenc_cpp.dir/gen-cpp/ThriftTest.cpp.o > In file included from > /home/marco/src/thrift.marco.hg/thebuild/lib/c_glib/test/gen-cpp/ThriftTest.cpp:7: > In file included from > /home/marco/src/thrift.marco.hg/thebuild/lib/c_glib/test/gen-cpp/ThriftTest.h:10: > In file included from > /home/marco/src/thrift.marco.hg/lib/cpp/src/thrift/TDispatchProcessor.h:22: > In file included from > /home/marco/src/thrift.marco.hg/lib/cpp/src/thrift/TProcessor.h:24: > In file included from > /home/marco/src/thrift.marco.hg/lib/cpp/src/thrift/protocol/TProtocol.h:23: > In file included from > /home/marco/src/thrift.marco.hg/lib/cpp/src/thrift/transport/TTransport.h:23: > /home/marco/src/thrift.marco.hg/lib/cpp/src/thrift/Thrift.h:45:10: fatal > error: 'boost/utility/enable_if.hpp' file not found > #include <boost/utility/enable_if.hpp> > {noformat} > h4. Compiler complaints about unspecified shared_ptr > - Compiler is confused by shared_ptr, it wants boost::shared_ptr (same > problem for MacOSX, which uses Clang as FreeBSD): > {noformat} > /home/marco/src/thrift.marco.hg/lib/c_glib/test/testthrifttestclient.cpp:594:5: > error: reference to 'shared_ptr' is ambiguous > shared_ptr<TProtocolFactory> protocolFactory(new > TBinaryProtocolFactory()); > ^ > /usr/include/c++/v1/memory:3750:29: note: candidate found by name lookup is > 'std::__1::shared_ptr' > class _LIBCPP_TYPE_VIS_ONLY shared_ptr > ^ > /usr/local/include/boost/smart_ptr/shared_ptr.hpp:722:36: note: candidate > found by name lookup is 'boost::shared_ptr' > template<class Y> friend class shared_ptr; > {noformat} > h4. libevent and TestClient > {noformat} > Linking CXX executable ../../bin/TestClient > ../../lib/libcrosstestgencpp.a(ThriftTest_types.cpp.o): In function > `std::__1::__tree_node_base<void*>*& > std::__1::__tree<std::__1::__value_type<thrift::test::Insanity, > ... > /home/marco/src/thrift.marco.hg/thebuild/test/cpp/gen-cpp/ThriftTest_types.cpp: > ... > undefined reference to > `thrift::test::Insanity::operator<(thrift::test::Insanity const&) const' > {noformat} > It seems that Clang and gcc (compliers or linkers, haven't investigated) have > a slightly different behavior as below: > On FreeBSD: > {noformat} > codino% for i in lib/*.a; do echo $i; nm --demangle $i | grep > 'Insanity::operator<'; done > lib/libcrossstressgencpp.a > lib/libcrosstestgencpp.a > U thrift::test::Insanity::operator<(thrift::test::Insanity > const&) const > lib/liblibparse.a > lib/libtestgenc.a > lib/libtestgenc_cpp.a > U thrift::test::Insanity::operator<(thrift::test::Insanity > const&) const > lib/libtestgencpp.a > U thrift::test::Insanity::operator<(thrift::test::Insanity > const&) const > 0000000000000000 T thrift::test::Insanity::operator<(thrift::test::Insanity > const&) const > lib/libtestgencpp_cob.a > lib/libthrift.a > lib/libthrift_c_glib.a > lib/libthriftnb.a > lib/libthriftz.a > {noformat} > On Linux: > {noformat} > for i in lib/*.a; do echo $i; nm --demangle $i | grep 'Insanity::operator<'; > done > lib/libcrossstressgencpp.a > lib/libcrosstestgencpp.a > lib/liblibparse.a > lib/libtestgencpp.a > U thrift::test::Insanity::operator<(thrift::test::Insanity > const&) const > 0000000000000000 T thrift::test::Insanity::operator<(thrift::test::Insanity > const&) const > lib/libtestgencpp_cob.a > lib/libthrift.a > lib/libthriftnb.a > lib/libthriftz.a > {noformat} > Function {{Insanity::operator<}} is defined in two indentical files: > {noformat} > lib/cpp/test/ThriftTest_extras.cpp > test/cpp/src/ThriftTest_extras.cpp > {noformat} > Solved by adding {{ThriftTest_extras.cpp}} also to library > {{crosstestgencpp}}. Tested on Linux, no complaints. > Upcoming pull request. -- This message was sent by Atlassian JIRA (v6.3.4#6332)