open-telemetry / opentelemetry-cpp

The OpenTelemetry C++ Client
https://opentelemetry.io/
Apache License 2.0
817 stars 392 forks source link

[BUILD] Building simple example code with Bazel #2573

Open chenhong805 opened 4 months ago

chenhong805 commented 4 months ago

Describe your environment Describe any aspect of your environment relevant to the problem, including your platform, build system, version numbers of installed dependencies, etc. If you're reporting a problem with a specific version of a library in this repo, please check whether the problem has been fixed on main branch.

OS: Linux ubuntu Bazel version: Build label: 7.0.1

Steps to reproduce Describe exactly how to reproduce the error. Include a code sample if applicable.

build rule:

cc_binary( name = "opentelemetry_test", srcs = ["opentelemetry_test.cpp"], copts = [ "-I/usr/local/include/", ],

deps = ["//zipkip_opentelemetry:zipkin_opentelemetry"],

linkopts = [
    "-L/usr/local/lib/",
    "-lcurl",
    "-lopentelemetry_common",
    "-lopentelemetry_trace",
    "-lopentelemetry_metrics",
    "-lopentelemetry_logs",
    "-lopentelemetry_version",
    "-lopentelemetry_resources",
    "-lopentelemetry_http_client_curl",
    "-lopentelemetry_exporter_ostream_span",
    "-lopentelemetry_exporter_ostream_metrics",
    "-lopentelemetry_exporter_ostream_logs",
    "-lopentelemetry_exporter_in_memory",
    "-lopentelemetry_exporter_zipkin_trace",
],

)


build command:

bazel build --verbose_failures --cxxopt=-std=c++14 //:opentelemetry_test


**What is the expected behavior?**
What did you expect to see?

Expect successful example build.

**What is the actual behavior?**
What did you see instead?

produce error:

/usr/local/lib//libopentelemetry_trace.a(random_id_generator.cc.o):random_id_generator.cc:function opentelemetry::v1::sdk::trace::RandomIdGenerator::GenerateSpanId(): error: undefined reference to 'opentelemetry::v1::sdk::common::Random::GenerateRandomBuffer(opentelemetry::v1::nostd::span<unsigned char, 18446744073709551615ul>)' /usr/local/lib//libopentelemetry_trace.a(random_id_generator.cc.o):random_id_generator.cc:function opentelemetry::v1::sdk::trace::RandomIdGenerator::GenerateTraceId(): error: undefined reference to 'opentelemetry::v1::sdk::common::Random::GenerateRandomBuffer(opentelemetry::v1::nostd::span<unsigned char, 18446744073709551615ul>)' /usr/local/lib//libopentelemetry_exporter_zipkin_trace.a(zipkin_exporter.cc.o):zipkin_exporter.cc:function opentelemetry::v1::exporter::zipkin::ZipkinExporter::ZipkinExporter(opentelemetry::v1::exporter::zipkin::ZipkinExporterOptions const&): error: undefined reference to 'opentelemetry::v1::sdk::trace::SpanExporter::SpanExporter()' /usr/local/lib//libopentelemetry_exporter_zipkin_trace.a(zipkin_exporter.cc.o):zipkin_exporter.cc:function opentelemetry::v1::exporter::zipkin::ZipkinExporter::ZipkinExporter(opentelemetry::v1::exporter::zipkin::ZipkinExporterOptions const&): error: undefined reference to 'opentelemetry::v1::ext::http::client::HttpClientFactory::CreateSync()' /usr/local/lib//libopentelemetry_exporter_zipkin_trace.a(zipkin_exporter.cc.o):zipkin_exporter.cc:function opentelemetry::v1::exporter::zipkin::ZipkinExporter::ZipkinExporter(opentelemetry::v1::exporter::zipkin::ZipkinExporterOptions const&): error: undefined reference to 'opentelemetry::v1::sdk::trace::SpanExporter::~SpanExporter()' /usr/local/lib//libopentelemetry_exporter_zipkin_trace.a(zipkin_exporter.cc.o):zipkin_exporter.cc:function opentelemetry::v1::exporter::zipkin::ZipkinExporter::ZipkinExporter(): error: undefined reference to 'opentelemetry::v1::sdk::trace::SpanExporter::SpanExporter()' /usr/local/lib//libopentelemetry_exporter_zipkin_trace.a(zipkin_exporter.cc.o):zipkin_exporter.cc:function opentelemetry::v1::exporter::zipkin::ZipkinExporter::ZipkinExporter(): error: undefined reference to 'opentelemetry::v1::ext::http::client::HttpClientFactory::CreateSync()' /usr/local/lib//libopentelemetry_exporter_zipkin_trace.a(zipkin_exporter.cc.o):zipkin_exporter.cc:function opentelemetry::v1::exporter::zipkin::ZipkinExporter::ZipkinExporter(): error: undefined reference to 'opentelemetry::v1::sdk::trace::SpanExporter::~SpanExporter()' /usr/local/lib//libopentelemetry_exporter_zipkin_trace.a(zipkin_exporter.cc.o):zipkin_exporter.cc:function opentelemetry::v1::exporter::zipkin::ZipkinExporter::ZipkinExporter(std::shared_ptr): error: undefined reference to 'opentelemetry::v1::sdk::trace::SpanExporter::SpanExporter()' /usr/local/lib//libopentelemetry_exporter_zipkin_trace.a(zipkin_exporter.cc.o):zipkin_exporter.cc:function opentelemetry::v1::exporter::zipkin::ZipkinExporter::ZipkinExporter(std::shared_ptr): error: undefined reference to 'opentelemetry::v1::sdk::trace::SpanExporter::~SpanExporter()' /usr/local/lib//libopentelemetry_exporter_zipkin_trace.a(zipkin_exporter.cc.o):zipkin_exporter.cc:function opentelemetry::v1::exporter::zipkin::ZipkinExporter::~ZipkinExporter(): error: undefined reference to 'opentelemetry::v1::sdk::trace::SpanExporter::~SpanExporter()' /usr/local/lib//libopentelemetry_exporter_zipkin_trace.a(zipkin_exporter.cc.o):zipkin_exporter.cc:typeinfo for opentelemetry::v1::exporter::zipkin::ZipkinExporter: error: undefined reference to 'typeinfo for opentelemetry::v1::sdk::trace::SpanExporter' collect2: error: ld returned 1 exit status Target //:opentelemetry_test failed to build



**Additional context**
Add any other context about the problem here.

Also try other version, same issue.
I found similar issue with CMake: https://github.com/open-telemetry/opentelemetry-cpp/issues/1359, but not sure how to fix in this example.

Thanks in advance!
malkia commented 4 months ago

I have BUILD file for this in my fork - https://github.com/malkia/opentelemetry-cpp/blame/main/examples/zipkin/BUILD - since it probably won't work here, here is a bit modified (hopefully still works)

package(default_visibility = ["//visibility:public"])

cc_binary(
    name = "example_zipkin",
    srcs = [
        "main.cc",
    ],
    linkopts = select({
        "//bazel:windows": [],
        "//conditions:default": ["-pthread"],
    }),
    tags = ["examples", "zipkin"],
    deps = [
        "//examples/common/foo_library:common_foo_library",
        "//exporters/zipkin:zipkin_exporter"
    ],
)

then you should be able to

bazel run example_zipkin
chenhong805 commented 3 months ago

Thanks malkia.

I look into the cmake configuration and try build with -fPIC on the bazel target, found that libopentelemetry_common.so is not installed.

I added following build option and resolve the issue: -DOPENTELEMETRY_INSTALL=ON (see https://github.com/open-telemetry/opentelemetry-cpp/blob/main/sdk/CMakeLists.txt).

I feel this could be added to the documentation.

Created PR: https://github.com/open-telemetry/opentelemetry-cpp/pull/2592

github-actions[bot] commented 1 month ago

This issue was marked as stale due to lack of activity.