Hi David,

This is for Arrow feature development, where the changes have been made in 
client.h.  Am I possibly running into symbol visibility guards I'm not 
expecting here and didn't spot yet?

Paul
________________________________
From: David Li <lidav...@apache.org>
Sent: Monday, February 13, 2023 11:11 AM
To: dev@arrow.apache.org <dev@arrow.apache.org>
Subject: Re: Build issues (Protobuf internal symbols)

The Protobuf-generated code from Arrow is not meant for external consumption, 
and in general, the way Protobuf works will make this complicated. What is the 
use case here?

(In fact, that header shouldn't even be available for you to include. It seems 
you're linking/including it from a build of Arrow, but it won't be there once 
Arrow is actually installed.)

In this case though, it's just that we purposely hide symbols by default. If 
there's a use case, we could unhide this specific symbol (we did it for one 
other Protobuf symbol) which would let you externally generate and use the 
headers (as long as you take care not to actually include the generated 
sources).

On Mon, Feb 13, 2023, at 14:05, Paul Nienaber wrote:
> Hi folks,
>
> I'm not familiar yet with all of the details of how Protobuf is set up
> to be built and included or whether there's a subtle difference between
> the CMake targets (headers vs cc sources), but we've recently gone and
> started touching some of the Protobuf types from a C++ header and are
> seeing build issues stemming from Protobuf-internal symbols/macros not
> being properly in scope.
>
> Working with /cpp/src/arrow/flight/sql/client.h we've included
> "arrow/flight/sql/FlightSql.pb.h" (this may itself be an issue, but
> using <google/protobuf/any.pb.g was not exposing generated types from
> sql/FlightSql), and we're seeing the following:
>
> [1/4] Building CXX object
> src/arrow/flight/sql/CMakeFiles/arrow_flight_sql_objlib.dir/client.cc.o
> FAILED:
> src/arrow/flight/sql/CMakeFiles/arrow_flight_sql_objlib.dir/client.cc.o
> /opt/homebrew/bin/ccache
> /Library/Developer/CommandLineTools/usr/bin/c++
> -DARROW_EXTRA_ERROR_CONTEXT -DARROW_FLIGHT_SQL_EXPORTING
> -DARROW_HAVE_NEON -DARROW_WITH_RE2 -DARROW_WITH_TIMING_TESTS
> -DARROW_WITH_ZLIB
> -DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental
> -DGRPC_USE_CERTIFICATE_VERIFIER
> -DGRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS -DURI_STATIC_BUILD
> -I/Users/pauln/bq/git/arrow/cpp/session-managemen-build-debug/src
> -I/Users/pauln/bq/git/arrow/cpp/src
> -I/Users/pauln/bq/git/arrow/cpp/src/generated -isystem
> /opt/homebrew/include -isystem
> /Users/pauln/bq/git/arrow/cpp/thirdparty/flatbuffers/include -isystem
> /Users/pauln/bq/git/arrow/cpp/thirdparty/hadoop/include -isystem
> /opt/homebrew/opt/openssl@1.1/include -isystem
> /Users/pauln/bq/git/arrow/cpp/session-managemen-build-debug/jemalloc_ep-prefix/src
> -fno-aligned-new  -Qunused-arguments -fcolor-diagnostics  -Wall -Wextra
> -Wdocumentation -Wshorten-64-to-32 -Wno-missing-braces
> -Wno-unused-parameter -Wno-constant-logical-operand
> -Wno-return-stack-address -Wno-unknown-warning-option -Wno-pass-failed
> -march=armv8-a  -g -Werror -O0 -ggdb -arch arm64 -isysroot
> /Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk -fPIC
> -std=c++17 -MD -MT
> src/arrow/flight/sql/CMakeFiles/arrow_flight_sql_objlib.dir/client.cc.o
> -MF
> src/arrow/flight/sql/CMakeFiles/arrow_flight_sql_objlib.dir/client.cc.o.d
> -o
> src/arrow/flight/sql/CMakeFiles/arrow_flight_sql_objlib.dir/client.cc.o
> -c /Users/pauln/bq/git/arrow/cpp/src/arrow/flight/sql/client.cc
> In file included from
> /Users/pauln/bq/git/arrow/cpp/src/arrow/flight/sql/client.cc:22:
> In file included from
> /Users/pauln/bq/git/arrow/cpp/src/arrow/flight/sql/client.h:24:
> /Users/pauln/bq/git/arrow/cpp/session-managemen-build-debug/src/arrow/flight/sql/FlightSql.pb.h:47:3:
> error: expected expression
>   static const uint32_t offsets[];
>   ^
> /Users/pauln/bq/git/arrow/cpp/session-managemen-build-debug/src/arrow/flight/sql/FlightSql.pb.h:46:32:
> error: variable has incomplete type 'struct ARROW_FLIGHT_SQL_EXPORT'
> struct ARROW_FLIGHT_SQL_EXPORT TableStruct_FlightSql_2eproto {
>                                ^
> /Users/pauln/bq/git/arrow/cpp/session-managemen-build-debug/src/arrow/flight/sql/FlightSql.pb.h:46:8:
> note: forward declaration of 'ARROW_FLIGHT_SQL_EXPORT'
> struct ARROW_FLIGHT_SQL_EXPORT TableStruct_FlightSql_2eproto {
>        ^
> /Users/pauln/bq/git/arrow/cpp/session-managemen-build-debug/src/arrow/flight/sql/FlightSql.pb.h:49:73:
> error: no member named 'DescriptorTable' in namespace
> 'google::protobuf::internal'
> ARROW_FLIGHT_SQL_EXPORT extern const
> ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable
> descriptor_table_FlightSql_2eproto;
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
> /Users/pauln/bq/git/arrow/cpp/session-managemen-build-debug/src/arrow/flight/sql/FlightSql.pb.h:49:88:
> error: expected ';' after top level declarator
> ARROW_FLIGHT_SQL_EXPORT extern const
> ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable
> descriptor_table_FlightSql_2eproto;
> [...]
>
>
> Any insight or suggestions are welcome here!
>
> Cheers
> Paul

Reply via email to