open-telemetry / opentelemetry-cpp

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

Opentelemetry-cpp/1.12.0 LNK2019 Errors when building my application #2607

Closed Odinaka-git closed 3 months ago

Odinaka-git commented 3 months ago

Describe your environment I'm using windows 11 and I'm building this application on windows visual studio.

Steps to reproduce There aren't really any steps to reproduce, I'm trying to export logs to grafana. I downloaded the opentelemetry-cpp SDK from conan, wrote my application then tried to build it, but then I got this error. I have downloaded other libraries from conan before and it seems like this error only occurs for opentelemetry-cpp.

What is the expected behavior? I expected it to build without any issues. When I download opentelemetry-cpp from conan, the include and ".lib" files are downloaded to my computer, so I linked the ".lib" files manually through my IDE. My code works as expected. It's just that I would like a situation where I didn't have to link it manually.

What is the actual behavior? I get LNK2019 errors for the log and resource sdk.

Additional context These are the errors I get:

Severity    Code    Description Project File    Line    Suppression State   Details
Error   LNK2019 unresolved external symbol "public: bool __cdecl opentelemetry::v1::sdk::logs::LoggerProvider::ForceFlush(class std::chrono::duration<__int64,struct std::ratio<1,1000000> >)" (?ForceFlush@LoggerProvider@logs@sdk@v1@opentelemetry@@QEAA_NV?$duration@_JU?$ratio@$00$0PECEA@@std@@@chrono@std@@@Z) referenced in function "void __cdecl `anonymous namespace'::CleanupLogger(void)" (?CleanupLogger@?A0x95e8d0f6@@YAXXZ)  app C:\Users\Desktop\Dashboards-for-SSI-deployments\otlp-app\build\main.obj 1       
Severity    Code    Description Project File    Line    Suppression State   Details
Error   LNK2019 unresolved external symbol "public: static class std::unique_ptr<class opentelemetry::v1::sdk::logs::LogRecordProcessor,struct std::default_delete<class opentelemetry::v1::sdk::logs::LogRecordProcessor> > __cdecl opentelemetry::v1::sdk::logs::SimpleLogRecordProcessorFactory::Create(class std::unique_ptr<class opentelemetry::v1::sdk::logs::LogRecordExporter,struct std::default_delete<class opentelemetry::v1::sdk::logs::LogRecordExporter> > &&)" (?Create@SimpleLogRecordProcessorFactory@logs@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@std@@$$QEAV?$unique_ptr@VLogRecordExporter@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordExporter@logs@sdk@v1@opentelemetry@@@std@@@7@@Z) referenced in function "void __cdecl `anonymous namespace'::InitLogger(void)" (?InitLogger@?A0x95e8d0f6@@YAXXZ) app C:\Users\Desktop\Dashboards-for-SSI-deployments\otlp-app\build\main.obj 1       
Severity    Code    Description Project File    Line    Suppression State   Details
Error   LNK2019 unresolved external symbol "public: static class std::unique_ptr<class opentelemetry::v1::sdk::logs::LoggerContext,struct std::default_delete<class opentelemetry::v1::sdk::logs::LoggerContext> > __cdecl opentelemetry::v1::sdk::logs::LoggerContextFactory::Create(class std::vector<class std::unique_ptr<class opentelemetry::v1::sdk::logs::LogRecordProcessor,struct std::default_delete<class opentelemetry::v1::sdk::logs::LogRecordProcessor> >,class std::allocator<class std::unique_ptr<class opentelemetry::v1::sdk::logs::LogRecordProcessor,struct std::default_delete<class opentelemetry::v1::sdk::logs::LogRecordProcessor> > > > &&,class opentelemetry::v1::sdk::resource::Resource const &)" (?Create@LoggerContextFactory@logs@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VLoggerContext@logs@sdk@v1@opentelemetry@@U?$default_delete@VLoggerContext@logs@sdk@v1@opentelemetry@@@std@@@std@@$$QEAV?$vector@V?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@std@@V?$allocator@V?$unique_ptr@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordProcessor@logs@sdk@v1@opentelemetry@@@std@@@std@@@2@@7@AEBVResource@resource@345@@Z) referenced in function "void __cdecl `anonymous namespace'::InitLogger(void)" (?InitLogger@?A0x95e8d0f6@@YAXXZ) app C:\Users\Desktop\Dashboards-for-SSI-deployments\otlp-app\build\main.obj 1       
Severity    Code    Description Project File    Line    Suppression State   Details
Error   LNK2019 unresolved external symbol "public: static class std::unique_ptr<class opentelemetry::v1::logs::LoggerProvider,struct std::default_delete<class opentelemetry::v1::logs::LoggerProvider> > __cdecl opentelemetry::v1::sdk::logs::LoggerProviderFactory::Create(class std::unique_ptr<class opentelemetry::v1::sdk::logs::LoggerContext,struct std::default_delete<class opentelemetry::v1::sdk::logs::LoggerContext> >)" (?Create@LoggerProviderFactory@logs@sdk@v1@opentelemetry@@SA?AV?$unique_ptr@VLoggerProvider@logs@v1@opentelemetry@@U?$default_delete@VLoggerProvider@logs@v1@opentelemetry@@@std@@@std@@V?$unique_ptr@VLoggerContext@logs@sdk@v1@opentelemetry@@U?$default_delete@VLoggerContext@logs@sdk@v1@opentelemetry@@@std@@@7@@Z) referenced in function "void __cdecl `anonymous namespace'::InitLogger(void)" (?InitLogger@?A0x95e8d0f6@@YAXXZ)   app C:\Users\Desktop\Dashboards-for-SSI-deployments\otlp-app\build\main.obj 1       
Severity    Code    Description Project File    Line    Suppression State   Details
Error   LNK2019 unresolved external symbol "public: static class std::unique_ptr<class opentelemetry::v1::sdk::logs::LogRecordExporter,struct std::default_delete<class opentelemetry::v1::sdk::logs::LogRecordExporter> > __cdecl opentelemetry::v1::exporter::otlp::OtlpHttpLogRecordExporterFactory::Create(struct opentelemetry::v1::exporter::otlp::OtlpHttpLogRecordExporterOptions const &)" (?Create@OtlpHttpLogRecordExporterFactory@otlp@exporter@v1@opentelemetry@@SA?AV?$unique_ptr@VLogRecordExporter@logs@sdk@v1@opentelemetry@@U?$default_delete@VLogRecordExporter@logs@sdk@v1@opentelemetry@@@std@@@std@@AEBUOtlpHttpLogRecordExporterOptions@2345@@Z) referenced in function "void __cdecl `anonymous namespace'::InitLogger(void)" (?InitLogger@?A0x95e8d0f6@@YAXXZ) app `C:\Users\Desktop\Dashboards-for-SSI-deployments\otlp-app\build\main.obj`   1   
marcalff commented 3 months ago

The conan build:

is out of date, and contains references to features that no longer exists, like Jaeger or ZPages.

For logs, it uses option with_logs_preview which no longer exists in opentelemetry-cpp, now that the log signal is mainstream.

Setting with_logs_preview = True should help, but I would expect more issues with conan given how outdated this build is.

This is a problem with the conan build itself, which is not maintained in this repository.