还可以循环着玩,闹呢。。。、、
错误:选取一部分
10.90 /usr/lib/gcc/aarch64-alpine-linux-musl/13.2.1/../../../../aarch64-alpine-linux-musl/bin/ld: otlp_grpc_exporter.cc:(.text+0xeb4): undefined reference to `opentelemetry::v1::exporter::otlp::OtlpGrpcClient::DelegateExport(opentelemetry::proto::collector::trace::v1::TraceService::StubInterface*, std::unique_ptr<grpc::ClientContext, std::default_delete<grpc::ClientContext> >&&, std::unique_ptr<google::protobuf::Arena, std::default_delete<google::protobuf::Arena> >&&, opentelemetry::proto::collector::trace::v1::ExportTraceServiceRequest&&, opentelemetry::proto::collector::trace::v1::ExportTraceServiceResponse*)'
10.90 /usr/lib/gcc/aarch64-alpine-linux-musl/13.2.1/../../../../aarch64-alpine-linux-musl/bin/ld: otlp_grpc_exporter.cc:(.text+0x14b4): undefined reference to `opentelemetry::v1::exporter::otlp::grpc_utils::grpc_status_code_to_string(grpc::StatusCode)'
过程
1.问题定位过程
otlp_grpc_exporter.cc:(.text+0x14b4): undefined reference to `opentelemetry::v1::exporter::otlp::grpc_utils::grpc_status_code_to_string(grpc::StatusCode)’
otlp_grpc_exporter.cc 依赖 grpc_utils 但是找不到,
- 所以项目中搜索otlp_grpc_exporter.cc
- 所以otlp_grpc_exporter.cc 是 otlp_grpc_exporter的类,然后在搜索grpc_utils
在client里,但是前期的一顿排查,opentelemetry_exporter_otlp_grpc_client 是依赖opentelemetry_exporter_otlp_grpc的,现在开始反向依赖了。
- 提供一个可以成功编译的顺序
RUN g++ -o myapp main.cpp -I/usr/local/include -L/usr/local/lib \
-lopentelemetry_exporter_in_memory \
-lopentelemetry_exporter_ostream_metrics \
-lopentelemetry_exporter_ostream_span \
-lopentelemetry_exporter_otlp_grpc_client \
-lopentelemetry_exporter_otlp_grpc_log \
-lopentelemetry_exporter_otlp_grpc_metrics \
-lopentelemetry_exporter_otlp_grpc \
-lopentelemetry_exporter_otlp_grpc_client \
-lopentelemetry_otlp_recordable \
-lopentelemetry_proto_grpc \
-lopentelemetry_exporter_ostream_logs \
-lopentelemetry_trace \
-lopentelemetry_proto \
-lopentelemetry_logs \
-lopentelemetry_metrics \
-lopentelemetry_resources \
-lopentelemetry_common \
-lgrpc++ -lprotobuf -lspdlog -lpthread
可能确实对c++循环依赖不太熟悉,记录一下,希望有所帮助;