Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUILD] Building simple example code with Bazel #2573

Open
chenhong805 opened this issue Mar 2, 2024 · 3 comments
Open

[BUILD] Building simple example code with Bazel #2573

chenhong805 opened this issue Mar 2, 2024 · 3 comments
Labels
bug Something isn't working Stale triage/accepted Indicates an issue or PR is ready to be actively worked on.

Comments

@chenhong805
Copy link
Contributor

chenhong805 commented Mar 2, 2024

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.

  • successfully install opentelemetry onto system:
    git clone --recurse-submodules --depth 1 --branch v1.14.2 https://github.com/open-telemetry/opentelemetry-cpp.git && cd opentelemetry-cpp && mkdir build && cd build && cmake -DWITH_BENCHMARK=OFF -DWITH_ZIPKIN=ON .. && cmake --build . -j 16 && cmake --install .

  • build this example with a bazel project with system dependencies:


# 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<opentelemetry::v1::ext::http::client::HttpClientSync>): 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<opentelemetry::v1::ext::http::client::HttpClientSync>): 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: #1359, but not sure how to fix in this example.

Thanks in advance!

@chenhong805 chenhong805 added the bug Something isn't working label Mar 2, 2024
@github-actions github-actions bot added the needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. label Mar 2, 2024
@malkia
Copy link

malkia commented Mar 5, 2024

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

@marcalff marcalff added triage/accepted Indicates an issue or PR is ready to be actively worked on. and removed needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. labels Mar 6, 2024
@chenhong805
Copy link
Contributor Author

chenhong805 commented Mar 16, 2024

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: #2592

Copy link

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

@github-actions github-actions bot added the Stale label May 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working Stale triage/accepted Indicates an issue or PR is ready to be actively worked on.
Projects
None yet
Development

No branches or pull requests

3 participants