OpenTelemetry-CPP: несоответствие библиотеки вызывает ошибку ссылки?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 OpenTelemetry-CPP: несоответствие библиотеки вызывает ошибку ссылки?

Сообщение Anonymous »

У меня есть проблемы с тем, что, кажется, является nostd :: std :: clash в библиотеках под Ubuntu 22. opentelemetry-cpp был настроен с: < /p>

Код: Выделить всё

cmake -DBUILD_TESTING=OFF -DWITH_EXAMPLES=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON -DWITH_OTLP_HTTP=ON -DWITH_OTLP_GRPC=ON -DWITH_ABI_VERSION_1=OFF -DWITH_ABI_VERSION_2=ON -DWITH_STL=ON -DCMAKE_CXX_STANDARD=17 ..
< /code>
Это успешно построено. В тестовом приложении используется экспортер журнала OTLP GRPC, и проблема, по -видимому, заключается в том, что приложение хочет, чтобы 1 -й параметр LoggerProvider :: GetLogger - OpenElemetry :: V2 :: Nostd :: String_View, в то время как LibopEneLemetry_logs. (См. Вывод Make и NM ниже) < /p>
$ make
g++ otel_test.o -L/home/mandrews/downloads/github/opentelemetry-cpp/build/exporters/otlp -lopentelemetry_common -L/home/mandrews/downloads/github/opentelemetry-cpp/build/sdk/src/common -lopentelemetry_exporter_otlp_grpc -lopentelemetry_exporter_otlp_grpc_client -lopentelemetry_exporter_otlp_grpc_log -lopentelemetry_exporter_otlp_http_log -L/home/mandrews/downloads/github/opentelemetry-cpp/build/sdk/src/logs -lopentelemetry_logs -L/home/mandrews/downloads/github/opentelemetry-cpp/build/sdk/src/trace -lopentelemetry_trace -L/home/mandrews/downloads/github/opentelemetry-cpp/build/_deps/grpc-build/third_party/protobuf -lprotobuf  -o otel_test
/usr/bin/ld: otel_test.o: in function `main':
/home/mandrews/dev/otel_test.cpp:41: undefined reference to `opentelemetry::v2::sdk::logs::LoggerProvider::GetLogger(opentelemetry::v2::nostd::string_view, opentelemetry::v2::nostd::string_view, opentelemetry::v2::nostd::string_view, opentelemetry::v2::nostd::string_view, opentelemetry::v2::common::KeyValueIterable const&)'
collect2: error: ld returned 1 exit status
make: *** [Makefile:45: otel_test] Error 1

$ nm ./sdk/src/logs/libopentelemetry_logs.so | grep GetLogger
00000000001ff854 T _ZN13opentelemetry2v23sdk4logs14LoggerProvider9GetLoggerESt17basic_string_viewIcSt11char_traitsIcEES7_S7_S7_RKNS0_6common16KeyValueIterableE
00000000001fc8ea W _ZN13opentelemetry2v24logs18NoopLoggerProvider9GetLoggerESt17basic_string_viewIcSt11char_traitsIcEES6_S6_S6_RKNS0_6common16KeyValueIterableE
00000000002499b4 T _ZNK13opentelemetry2v23sdk4logs13LoggerContext21GetLoggerConfiguratorEv
< /code>
Как приложение получило идею, что она должна хотеть версии nostd ::?  Не знаю, как это исправить ... < /p>
Вот Makefile: < /p>
oteldir=/home/mandrews/downloads/github/opentelemetry-cpp
otellibdir=$(oteldir)/build

appanalysisdir=$(projectdir)/app_analysis
zlibdir=$(thirdpartydir)/zlib

module_defs= -D_LINUX -DOPENTELEMETRY_ABI_VERSION_NO=2

sources=\
otel_test.cpp

objects=$(sources:.cpp=.o)

cppflags=\
-std=c++20 \
-fno-omit-frame-pointer \
-fpermissive \
-Wno-unused-local-typedefs \
$(module_defs) \
-I. \
-I$(oteldir)/ext/include \
-I$(oteldir)/api/include \
-I$(oteldir)/sdk/include \
-I$(oteldir)/exporters/otlp/include

ldflags=\
-L$(otellibdir)/exporters/otlp -lopentelemetry_common \
-L$(otellibdir)/sdk/src/common -lopentelemetry_exporter_otlp_grpc -lopentelemetry_exporter_otlp_grpc_client \
-lopentelemetry_exporter_otlp_grpc_log -lopentelemetry_exporter_otlp_http_log \
-L$(otellibdir)/sdk/src/logs -lopentelemetry_logs \
-L$(otellibdir)/sdk/src/trace -lopentelemetry_trace \
-L$(otellibdir)/_deps/grpc-build/third_party/protobuf -lprotobuf

ifeq ($(BUILD),DEBUG)
cppflags += -ggdb3 -O0 -D_DEBUG
else
cppflags += -g -Wall -O2 -DNDEBUG
endif

executable=otel_test
all: $(executable)

otel_test: $(objects)
g++ $^ $(ldflags) -o $@

%.o: %.cpp
g++ $(cppflags) -c -o $@ $<

clean:
rm -f $(objects)
rm -f $(executable)
Что делать, чтобы успешно компилировать?

Подробнее здесь: https://stackoverflow.com/questions/797 ... link-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»