Skip to content

Some symbols in libprotoc's public API are hidden #12618

@coryan

Description

@coryan

What version of protobuf and what language are you using?

Version: v22.3
Language: C++

What operating system (Linux, Windows, ...) and version?

Linux. Tested with Fedora 37, but I think the problem is more general.

What runtime / compiler are you using (e.g., python version or gcc version)

GCC 12.2. I expect the problem is more general.

What did you do?

I am attaching a Dockerfile, you can run the test using:

 docker buildx build -<Dockerfile

What did you expect to see

I expected the program to link successfully.

What did you see instead?

 => ERROR [12/12] RUN cmake --build cmake-out                                                                                                                                                                                                                                             0.8s
------                                                                                                                                                                                                                                                                                         
 > [12/12] RUN cmake --build cmake-out:
#0 0.682 [1/2] Building CXX object CMakeFiles/repro.dir/repro.cc.o
#0 0.747 [2/2] Linking CXX executable repro
#0 0.747 FAILED: repro 
#0 0.747 : && /usr/bin/c++   CMakeFiles/repro.dir/repro.cc.o -o repro  -Wl,-rpath,/usr/local/lib64  /usr/local/lib64/libprotoc.so.22.3.0  /usr/local/lib64/libabsl_log_internal_check_op.so.2301.0.0  /usr/local/lib64/libabsl_leak_check.so.2301.0.0  /usr/local/lib64/libabsl_die_if_null.so.2301.0.0  /usr/local/lib64/libabsl_log_internal_conditions.so.2301.0.0  /usr/local/lib64/libabsl_log_internal_message.so.2301.0.0  /usr/local/lib64/libabsl_log_internal_nullguard.so.2301.0.0  /usr/local/lib64/libabsl_examine_stack.so.2301.0.0  /usr/local/lib64/libabsl_log_internal_format.so.2301.0.0  /usr/local/lib64/libabsl_log_internal_proto.so.2301.0.0  /usr/local/lib64/libabsl_log_internal_log_sink_set.so.2301.0.0  /usr/local/lib64/libabsl_log_sink.so.2301.0.0  /usr/local/lib64/libabsl_log_entry.so.2301.0.0  /usr/local/lib64/libabsl_flags.so.2301.0.0  /usr/local/lib64/libabsl_flags_internal.so.2301.0.0  /usr/local/lib64/libabsl_flags_marshalling.so.2301.0.0  /usr/local/lib64/libabsl_flags_reflection.so.2301.0.0  /usr/local/lib64/libabsl_flags_config.so.2301.0.0  /usr/local/lib64/libabsl_flags_program_name.so.2301.0.0  /usr/local/lib64/libabsl_flags_private_handle_accessor.so.2301.0.0  /usr/local/lib64/libabsl_flags_commandlineflag.so.2301.0.0  /usr/local/lib64/libabsl_flags_commandlineflag_internal.so.2301.0.0  /usr/local/lib64/libabsl_log_initialize.so.2301.0.0  /usr/local/lib64/libabsl_log_globals.so.2301.0.0  /usr/local/lib64/libabsl_log_internal_globals.so.2301.0.0  /usr/local/lib64/libabsl_hash.so.2301.0.0  /usr/local/lib64/libabsl_city.so.2301.0.0  /usr/local/lib64/libabsl_low_level_hash.so.2301.0.0  /usr/local/lib64/libabsl_raw_hash_set.so.2301.0.0  /usr/local/lib64/libabsl_hashtablez_sampler.so.2301.0.0  /usr/local/lib64/libabsl_statusor.so.2301.0.0  /usr/local/lib64/libabsl_status.so.2301.0.0  /usr/local/lib64/libabsl_cord.so.2301.0.0  /usr/local/lib64/libabsl_cordz_info.so.2301.0.0  /usr/local/lib64/libabsl_cord_internal.so.2301.0.0  /usr/local/lib64/libabsl_cordz_functions.so.2301.0.0  /usr/local/lib64/libabsl_exponential_biased.so.2301.0.0  /usr/local/lib64/libabsl_cordz_handle.so.2301.0.0  /usr/local/lib64/libabsl_crc_cord_state.so.2301.0.0  /usr/local/lib64/libabsl_crc32c.so.2301.0.0  /usr/local/lib64/libabsl_crc_internal.so.2301.0.0  /usr/local/lib64/libabsl_crc_cpu_detect.so.2301.0.0  /usr/local/lib64/libabsl_bad_optional_access.so.2301.0.0  /usr/local/lib64/libabsl_str_format_internal.so.2301.0.0  /usr/local/lib64/libabsl_strerror.so.2301.0.0  /usr/local/lib64/libabsl_synchronization.so.2301.0.0  /usr/local/lib64/libabsl_stacktrace.so.2301.0.0  /usr/local/lib64/libabsl_symbolize.so.2301.0.0  /usr/local/lib64/libabsl_debugging_internal.so.2301.0.0  /usr/local/lib64/libabsl_demangle_internal.so.2301.0.0  /usr/local/lib64/libabsl_graphcycles_internal.so.2301.0.0  /usr/local/lib64/libabsl_malloc_internal.so.2301.0.0  /usr/local/lib64/libabsl_time.so.2301.0.0  /usr/local/lib64/libabsl_strings.so.2301.0.0  /usr/local/lib64/libabsl_throw_delegate.so.2301.0.0  /usr/local/lib64/libabsl_strings_internal.so.2301.0.0  /usr/local/lib64/libabsl_base.so.2301.0.0  /usr/local/lib64/libabsl_spinlock_wait.so.2301.0.0  /usr/local/lib64/libabsl_int128.so.2301.0.0  /usr/local/lib64/libabsl_civil_time.so.2301.0.0  /usr/local/lib64/libabsl_time_zone.so.2301.0.0  /usr/local/lib64/libabsl_bad_variant_access.so.2301.0.0  /usr/local/lib64/libabsl_raw_logging_internal.so.2301.0.0  /usr/local/lib64/libabsl_log_severity.so.2301.0.0  -Wl,-rpath-link,/usr/local/lib64 && :
#0 0.747 /usr/bin/ld: CMakeFiles/repro.dir/repro.cc.o: in function `main':
#0 0.747 repro.cc:(.text+0x16): undefined reference to `google::protobuf::compiler::cpp::FieldName[abi:cxx11](google::protobuf::FieldDescriptor const*)'
#0 0.747 collect2: error: ld returned 1 exit status
#0 0.747 ninja: build stopped: subcommand failed.
------
ERROR: failed to solve: executor failed running [/bin/sh -c cmake --build cmake-out]: exit code: 1

Anything else we should know about your project / environment

I think the problem was introduced in

983fc2d

Many of the symbols in google::protobuf::compiler::cpp seem to be intended for public usage, but are not marked
Dockerfile.txt

Compare:

https://github.com/protocolbuffers/protobuf/blob/22.x/src/google/protobuf/compiler/cpp/names.h#L90

vs.

https://github.com/protocolbuffers/protobuf/blob/22.x/src/google/protobuf/compiler/cpp/names.h#L103

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions