Running with the follow cmake definitions.
OTEL Version: v1.16.1
Abseil Version: 20240722.0
Protobuf Version: v26.1
gRPC Version: v1.63.2
-DCMAKE_PREFIX_PATH="/$prefix/../grpc;/$prefix/../abseil-cpp;/$prefix/../protobuf"
-DCMAKE_CXX_STANDARD=17
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DWITH_OTLP_GRPC=ON
-DWITH_ABSEIL=ON
-DWITH_STL=ON
-DBUILD_TESTING=OFF
-DCMAKE_INSTALL_PREFIX="/${prefix}"
-DOPENTELEMETRY_INSTALL=ON
With the grpc, abseil, and protobuf prefix path definitions all being compiled from source versions with PIC enabled, results in the following error:
FAILED: libopentelemetry_proto_grpc.dylib
: && /usr/bin/clang++ -O3 -DNDEBUG -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.5.sdk -dynamiclib -Wl,-headerpad_max_install_names -o libopentelemetry_proto_grpc.dylib -install_name @rpath/libopentelemetry_proto_grpc.dylib CMakeFiles/opentelemetry_proto_grpc.dir/generated/third_party/opentelemetry-proto/opentelemetry/proto/collector/trace/v1/trace_service.grpc.pb.cc.o CMakeFiles/opentelemetry_proto_grpc.dir/generated/third_party/opentelemetry-proto/opentelemetry/proto/collector/logs/v1/logs_service.grpc.pb.cc.o CMakeFiles/opentelemetry_proto_grpc.dir/generated/third_party/opentelemetry-proto/opentelemetry/proto/collector/metrics/v1/metrics_service.grpc.pb.cc.o -Wl,-rpath,/Users/jstackhouse/myproj/build/opentelemetry-cpp/build -Wl,-rpath,/opt/grpc/lib libopentelemetry_proto.dylib /opt/abseil-cpp/lib/libabsl_synchronization.a /opt/protobuf/lib/libprotobuf.a /opt/grpc/lib/libz.dylib /opt/abseil-cpp/lib/libabsl_log_internal_check_op.a /opt/abseil-cpp/lib/libabsl_leak_check.a /opt/abseil-cpp/lib/libabsl_die_if_null.a /opt/abseil-cpp/lib/libabsl_log_internal_conditions.a /opt/abseil-cpp/lib/libabsl_log_internal_message.a /opt/abseil-cpp/lib/libabsl_log_internal_nullguard.a /opt/abseil-cpp/lib/libabsl_examine_stack.a /opt/abseil-cpp/lib/libabsl_log_internal_format.a /opt/abseil-cpp/lib/libabsl_log_internal_proto.a /opt/abseil-cpp/lib/libabsl_log_internal_log_sink_set.a /opt/abseil-cpp/lib/libabsl_log_sink.a /opt/abseil-cpp/lib/libabsl_log_entry.a /opt/abseil-cpp/lib/libabsl_flags_internal.a /opt/abseil-cpp/lib/libabsl_flags_marshalling.a /opt/abseil-cpp/lib/libabsl_flags_reflection.a /opt/abseil-cpp/lib/libabsl_flags_config.a /opt/abseil-cpp/lib/libabsl_flags_program_name.a /opt/abseil-cpp/lib/libabsl_flags_private_handle_accessor.a /opt/abseil-cpp/lib/libabsl_flags_commandlineflag.a /opt/abseil-cpp/lib/libabsl_flags_commandlineflag_internal.a /opt/abseil-cpp/lib/libabsl_log_initialize.a /opt/abseil-cpp/lib/libabsl_log_globals.a /opt/abseil-cpp/lib/libabsl_vlog_config_internal.a /opt/abseil-cpp/lib/libabsl_log_internal_fnmatch.a /opt/abseil-cpp/lib/libabsl_log_internal_globals.a /opt/abseil-cpp/lib/libabsl_raw_hash_set.a /opt/abseil-cpp/lib/libabsl_hash.a /opt/abseil-cpp/lib/libabsl_city.a /opt/abseil-cpp/lib/libabsl_low_level_hash.a /opt/abseil-cpp/lib/libabsl_hashtablez_sampler.a /opt/abseil-cpp/lib/libabsl_statusor.a /opt/abseil-cpp/lib/libabsl_status.a /opt/abseil-cpp/lib/libabsl_cord.a /opt/abseil-cpp/lib/libabsl_cordz_info.a /opt/abseil-cpp/lib/libabsl_cord_internal.a /opt/abseil-cpp/lib/libabsl_cordz_functions.a /opt/abseil-cpp/lib/libabsl_exponential_biased.a /opt/abseil-cpp/lib/libabsl_cordz_handle.a /opt/abseil-cpp/lib/libabsl_synchronization.a /opt/abseil-cpp/lib/libabsl_graphcycles_internal.a /opt/abseil-cpp/lib/libabsl_kernel_timeout_internal.a /opt/abseil-cpp/lib/libabsl_stacktrace.a /opt/abseil-cpp/lib/libabsl_symbolize.a /opt/abseil-cpp/lib/libabsl_malloc_internal.a /opt/abseil-cpp/lib/libabsl_debugging_internal.a /opt/abseil-cpp/lib/libabsl_demangle_internal.a /opt/abseil-cpp/lib/libabsl_demangle_rust.a /opt/abseil-cpp/lib/libabsl_decode_rust_punycode.a /opt/abseil-cpp/lib/libabsl_utf8_for_code_point.a /opt/abseil-cpp/lib/libabsl_time.a /opt/abseil-cpp/lib/libabsl_civil_time.a /opt/abseil-cpp/lib/libabsl_time_zone.a -Wl,-framework,CoreFoundation /opt/abseil-cpp/lib/libabsl_crc_cord_state.a /opt/abseil-cpp/lib/libabsl_crc32c.a /opt/abseil-cpp/lib/libabsl_crc_internal.a /opt/abseil-cpp/lib/libabsl_crc_cpu_detect.a /opt/abseil-cpp/lib/libabsl_bad_optional_access.a /opt/abseil-cpp/lib/libabsl_strerror.a /opt/abseil-cpp/lib/libabsl_str_format_internal.a /opt/abseil-cpp/lib/libabsl_bad_variant_access.a /opt/protobuf/lib/libutf8_validity.a /opt/abseil-cpp/lib/libabsl_strings.a /opt/abseil-cpp/lib/libabsl_int128.a /opt/abseil-cpp/lib/libabsl_strings_internal.a /opt/abseil-cpp/lib/libabsl_string_view.a /opt/abseil-cpp/lib/libabsl_base.a /opt/abseil-cpp/lib/libabsl_spinlock_wait.a /opt/abseil-cpp/lib/libabsl_throw_delegate.a /opt/abseil-cpp/lib/libabsl_raw_logging_internal.a /opt/abseil-cpp/lib/libabsl_log_severity.a && :
ld: warning: ignoring duplicate libraries: '/opt/abseil-cpp/lib/libabsl_synchronization.a'
Undefined symbols for architecture arm64:
"grpc::Status::OK", referenced from:
grpc::Status grpc::GenericDeserialize<grpc::ProtoBufferReader, google::protobuf::MessageLite>(grpc::ByteBuffer*, google::protobuf::MessageLite*) in trace_service.grpc.pb.cc.o
grpc::Status grpc::GenericSerialize<grpc::ProtoBufferWriter, google::protobuf::MessageLite>(google::protobuf::MessageLite const&, grpc::ByteBuffer*, bool*) in trace_service.grpc.pb.cc.o
grpc::Status grpc::GenericSerialize<grpc::ProtoBufferWriter, google::protobuf::MessageLite>(google::protobuf::MessageLite const&, grpc::ByteBuffer*, bool*) in trace_service.grpc.pb.cc.o
... (more grpc undefined symbols)
Looking into this, because the gRPC is compiled as a static library, there is no PUBLIC link to the libopentelemetry_proto_grpc target. Which at build time seems to lead to this having missing symbols.
I believe looking at how homebrew compiles this, it's possible that the issue relates to that they add:
ENV.append "LDFLAGS", "-Wl,-undefined,dynamic_lookup" if OS.mac?
Which would allow this link step to proceed and resolve later when I assume the static gRPC would be compiled into some future library that would then provide these symbols.
Running with the follow cmake definitions.
OTEL Version: v1.16.1
Abseil Version: 20240722.0
Protobuf Version: v26.1
gRPC Version: v1.63.2
-DCMAKE_PREFIX_PATH="/$prefix/../grpc;/$prefix/../abseil-cpp;/$prefix/../protobuf"
-DCMAKE_CXX_STANDARD=17
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DWITH_OTLP_GRPC=ON
-DWITH_ABSEIL=ON
-DWITH_STL=ON
-DBUILD_TESTING=OFF
-DCMAKE_INSTALL_PREFIX="/${prefix}"
-DOPENTELEMETRY_INSTALL=ON
With the grpc, abseil, and protobuf prefix path definitions all being compiled from source versions with PIC enabled, results in the following error:
Looking into this, because the gRPC is compiled as a static library, there is no PUBLIC link to the libopentelemetry_proto_grpc target. Which at build time seems to lead to this having missing symbols.
I believe looking at how homebrew compiles this, it's possible that the issue relates to that they add:
ENV.append "LDFLAGS", "-Wl,-undefined,dynamic_lookup" if OS.mac?
Which would allow this link step to proceed and resolve later when I assume the static gRPC would be compiled into some future library that would then provide these symbols.