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