[ 
https://issues.apache.org/jira/browse/ARROW-15700?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17493525#comment-17493525
 ] 

Weston Pace commented on ARROW-15700:
-------------------------------------

The root cause is that the protoc on Ubuntu is too old.  If I specify a minimum 
version of 3.15.0 then the compilation fails with a nicer message (protoc is 
too old).

If I specify Protobuf_SOURCE=BUNDLED or ARROW_ENGINE=OFF then the compilation 
succeeds.

I can update the crossbow job to specify Protobuf_SOURCE=BUNDLED.  Is this the 
correct fix?  Or is there some way we can fall back to bundled if the system 
version is too old?

> [C++] Compilation error on Ubuntu 18.04
> ---------------------------------------
>
>                 Key: ARROW-15700
>                 URL: https://issues.apache.org/jira/browse/ARROW-15700
>             Project: Apache Arrow
>          Issue Type: Bug
>          Components: C++, Compute IR, Continuous Integration
>            Reporter: Antoine Pitrou
>            Assignee: Jeroen van Straten
>            Priority: Blocker
>              Labels: substrait
>             Fix For: 8.0.0
>
>
> See Crossbow build logs here:
> https://github.com/ursacomputing/crossbow/runs/5211900067?check_suite_focus=true#step:5:1389
> {code}
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc: In member 
> function 'arrow::Status 
> arrow::engine::{anonymous}::ScalarToProtoImpl::Visit(const 
> arrow::StringScalar&)':
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:469:78: error: 
> no matching function for call to 
> 'arrow::engine::{anonymous}::ScalarToProtoImpl::FromBuffer(<unresolved 
> overloaded function type>, const arrow::StringScalar&)'
>    Status Visit(const StringScalar& s) { return FromBuffer(&Lit::set_string, 
> s); }
>                                                                               
> ^
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:447:10: note: 
> candidate: template<class ScalarWithBufferValue> arrow::Status 
> arrow::engine::{anonymous}::ScalarToProtoImpl::FromBuffer(void 
> (substrait::Expression_Literal::*)(std::__cxx11::string&&), const 
> ScalarWithBufferValue&)
>    Status FromBuffer(void 
> (substrait::Expression::Literal::*set)(std::string&&),
>           ^~~~~~~~~~
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:447:10: note:   
> template argument deduction/substitution failed:
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:469:59: note:   
> cannot convert '& substrait::Expression_Literal::set_string' (type 
> '<unresolved overloaded function type>') to type 'void 
> (substrait::Expression_Literal::*)(std::__cxx11::string&&) {aka void 
> (substrait::Expression_Literal::*)(std::__cxx11::basic_string<char>&&)}'
>    Status Visit(const StringScalar& s) { return FromBuffer(&Lit::set_string, 
> s); }
>                                                            ^~~~
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc: In member 
> function 'arrow::Status 
> arrow::engine::{anonymous}::ScalarToProtoImpl::Visit(const 
> arrow::BinaryScalar&)':
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:470:78: error: 
> no matching function for call to 
> 'arrow::engine::{anonymous}::ScalarToProtoImpl::FromBuffer(<unresolved 
> overloaded function type>, const arrow::BinaryScalar&)'
>    Status Visit(const BinaryScalar& s) { return FromBuffer(&Lit::set_binary, 
> s); }
>                                                                               
> ^
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:447:10: note: 
> candidate: template<class ScalarWithBufferValue> arrow::Status 
> arrow::engine::{anonymous}::ScalarToProtoImpl::FromBuffer(void 
> (substrait::Expression_Literal::*)(std::__cxx11::string&&), const 
> ScalarWithBufferValue&)
>    Status FromBuffer(void 
> (substrait::Expression::Literal::*set)(std::string&&),
>           ^~~~~~~~~~
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:447:10: note:   
> template argument deduction/substitution failed:
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:470:59: note:   
> cannot convert '& substrait::Expression_Literal::set_binary' (type 
> '<unresolved overloaded function type>') to type 'void 
> (substrait::Expression_Literal::*)(std::__cxx11::string&&) {aka void 
> (substrait::Expression_Literal::*)(std::__cxx11::basic_string<char>&&)}'
>    Status Visit(const BinaryScalar& s) { return FromBuffer(&Lit::set_binary, 
> s); }
>                                                            ^~~~
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc: In member 
> function 'arrow::Status 
> arrow::engine::{anonymous}::ScalarToProtoImpl::Visit(const 
> arrow::FixedSizeBinaryScalar&)':
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:473:48: error: 
> no matching function for call to 
> 'arrow::engine::{anonymous}::ScalarToProtoImpl::FromBuffer(<unresolved 
> overloaded function type>, const arrow::FixedSizeBinaryScalar&)'
>      return FromBuffer(&Lit::set_fixed_binary, s);
>                                                 ^
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:447:10: note: 
> candidate: template<class ScalarWithBufferValue> arrow::Status 
> arrow::engine::{anonymous}::ScalarToProtoImpl::FromBuffer(void 
> (substrait::Expression_Literal::*)(std::__cxx11::string&&), const 
> ScalarWithBufferValue&)
>    Status FromBuffer(void 
> (substrait::Expression::Literal::*set)(std::string&&),
>           ^~~~~~~~~~
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:447:10: note:   
> template argument deduction/substitution failed:
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:473:23: note:   
> cannot convert '& substrait::Expression_Literal::set_fixed_binary' (type 
> '<unresolved overloaded function type>') to type 'void 
> (substrait::Expression_Literal::*)(std::__cxx11::string&&) {aka void 
> (substrait::Expression_Literal::*)(std::__cxx11::basic_string<char>&&)}'
>      return FromBuffer(&Lit::set_fixed_binary, s);
>                        ^~~~
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc: In member 
> function 'arrow::Status 
> arrow::engine::{anonymous}::ScalarToProtoImpl::Visit(const 
> arrow::ExtensionScalar&)':
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:598:77: error: 
> no matching function for call to 
> 'arrow::engine::{anonymous}::ScalarToProtoImpl::FromBuffer(<unresolved 
> overloaded function type>, const arrow::FixedSizeBinaryScalar&)'
>                          checked_cast<const 
> FixedSizeBinaryScalar&>(*s.value));
>                                                                              ^
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:447:10: note: 
> candidate: template<class ScalarWithBufferValue> arrow::Status 
> arrow::engine::{anonymous}::ScalarToProtoImpl::FromBuffer(void 
> (substrait::Expression_Literal::*)(std::__cxx11::string&&), const 
> ScalarWithBufferValue&)
>    Status FromBuffer(void 
> (substrait::Expression::Literal::*set)(std::string&&),
>           ^~~~~~~~~~
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:447:10: note:   
> template argument deduction/substitution failed:
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:597:25: note:   
> cannot convert '& substrait::Expression_Literal::set_uuid' (type '<unresolved 
> overloaded function type>') to type 'void 
> (substrait::Expression_Literal::*)(std::__cxx11::string&&) {aka void 
> (substrait::Expression_Literal::*)(std::__cxx11::basic_string<char>&&)}'
>        return FromBuffer(&Lit::set_uuid,
>                          ^~~~
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:603:77: error: 
> no matching function for call to 
> 'arrow::engine::{anonymous}::ScalarToProtoImpl::FromBuffer(<unresolved 
> overloaded function type>, const arrow::FixedSizeBinaryScalar&)'
>                          checked_cast<const 
> FixedSizeBinaryScalar&>(*s.value));
>                                                                              ^
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:447:10: note: 
> candidate: template<class ScalarWithBufferValue> arrow::Status 
> arrow::engine::{anonymous}::ScalarToProtoImpl::FromBuffer(void 
> (substrait::Expression_Literal::*)(std::__cxx11::string&&), const 
> ScalarWithBufferValue&)
>    Status FromBuffer(void 
> (substrait::Expression::Literal::*set)(std::string&&),
>           ^~~~~~~~~~
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:447:10: note:   
> template argument deduction/substitution failed:
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:602:25: note:   
> cannot convert '& substrait::Expression_Literal::set_fixed_char' (type 
> '<unresolved overloaded function type>') to type 'void 
> (substrait::Expression_Literal::*)(std::__cxx11::string&&) {aka void 
> (substrait::Expression_Literal::*)(std::__cxx11::basic_string<char>&&)}'
>        return FromBuffer(&Lit::set_fixed_char,
>                          ^~~~
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc: In function 
> 'arrow::Result<std::unique_ptr<substrait::Expression> > 
> arrow::engine::ToProto(const arrow::compute::Expression&, 
> arrow::engine::ExtensionSet*)':
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:860:74: error: 
> 'bool substrait::Expression_Literal::has_i32() const' is private within this 
> context
>        if (arguments[1]->has_literal() && arguments[1]->literal().has_i32()) {
>                                                                           ^
> In file included from 
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.h:29:0,
>                  from 
> /arrow/cpp/src/arrow/engine/substrait/expression_internal.cc:20:
> src/arrow/engine/generated/substrait/expression.pb.h:6207:13: note: declared 
> private here
>  inline bool Expression_Literal::has_i32() const {
>              ^~~~~~~~~~~~~~~~~~
> {code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to