Apparently, -lprotobuf doesn't pull in abseil libs. Some of the below can be hacked around by explicitly linking against some of the abseil libs, but I'm not sure about one of them.
c++ -std=gnu++17 navmon.pb.o ubxtool.o ubx.o bits.o ext/fmt-9.1.0/src/format.o galileo.o gps.o beidou.o navmon.o ephemeris.o ext/powerblog/ext/simplesocket/swrappers.o ext/powerblog/ext/simplesocket/sclasses.o ext/powerblog/ext/simplesocket/comboaddress.o osen.o githash.o nmmsender.o zstdwrap.o -o ubxtool -L/usr/local/lib -lprotobuf -pthread -lzstd
ld: error: undefined symbol: absl::lts_20230125::log_internal::LogMessageFatal::LogMessageFatal(char const*, int, std::__1::basic_string_view<char, std::__1::char_traits<char>>)
>>> referenced by navmon.pb.cc:1794
>>> navmon.pb.o:(NavMonMessage_GalileoInav::MergeImpl(google::protobuf::Message&, google::protobuf::Message const&))
>>> referenced by navmon.pb.cc:2189
>>> navmon.pb.o:(NavMonMessage_GalileoFnav::MergeImpl(google::protobuf::Message&, google::protobuf::Message const&))
>>> referenced by navmon.pb.cc:2553
>>> navmon.pb.o:(NavMonMessage_GalileoCnav::MergeImpl(google::protobuf::Message&, google::protobuf::Message const&))
>>> referenced 63 more times
ld: error: undefined symbol: absl::lts_20230125::log_internal::LogMessageFatal::~LogMessageFatal()
>>> referenced by navmon.pb.cc:1794
>>> navmon.pb.o:(NavMonMessage_GalileoInav::MergeImpl(google::protobuf::Message&, google::protobuf::Message const&))
>>> referenced by navmon.pb.cc:1794
>>> navmon.pb.o:(NavMonMessage_GalileoInav::MergeImpl(google::protobuf::Message&, google::protobuf::Message const&))
>>> referenced by navmon.pb.cc:2189
>>> navmon.pb.o:(NavMonMessage_GalileoFnav::MergeImpl(google::protobuf::Message&, google::protobuf::Message const&))
>>> referenced 122 more times
ld: error: undefined symbol: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>* absl::lts_20230125::log_internal::MakeCheckOpString<void const*, void const*>(void const*, void const*, char const*)
>>> referenced by check_op.h:337 (/usr/local/include/absl/log/internal/check_op.h:337)
>>> navmon.pb.o:(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>* absl::lts_20230125::log_internal::Check_NEImpl<NavMonMessage_GalileoInav const*, NavMonMessage_GalileoInav*>(NavMonMessage_GalileoInav const* const&, NavMonMessage_GalileoInav* const&, char const*))
>>> referenced by check_op.h:337 (/usr/local/include/absl/log/internal/check_op.h:337)
>>> navmon.pb.o:(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>* absl::lts_20230125::log_internal::Check_NEImpl<NavMonMessage_GalileoFnav const*, NavMonMessage_GalileoFnav*>(NavMonMessage_GalileoFnav const* const&, NavMonMessage_GalileoFnav* const&, char const*))
>>> referenced by check_op.h:337 (/usr/local/include/absl/log/internal/check_op.h:337)
>>> navmon.pb.o:(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>* absl::lts_20230125::log_internal::Check_NEImpl<NavMonMessage_GalileoCnav const*, NavMonMessage_GalileoCnav*>(NavMonMessage_GalileoCnav const* const&, NavMonMessage_GalileoCnav* const&, char const*))
>>> referenced 18 more times
ld: error: undefined symbol: absl::lts_20230125::log_internal::LogMessage::CopyToEncodedBuffer(std::__1::basic_string_view<char, std::__1::char_traits<char>>, absl::lts_20230125::log_internal::LogMessage::StringType)
>>> referenced by log_message.h:295 (/usr/local/include/absl/log/internal/log_message.h:295)
>>> navmon.pb.o:(absl::lts_20230125::log_internal::LogMessage& absl::lts_20230125::log_internal::LogMessage::operator<<<19>(char const (&) [19]))
ld: error: undefined symbol: absl::lts_20230125::log_internal::LogMessage& absl::lts_20230125::log_internal::LogMessage::operator<<<unsigned long, 0>(unsigned long const&)
>>> referenced by log_message.h:120 (/usr/local/include/absl/log/internal/log_message.h:120)
>>> navmon.pb.o:(absl::lts_20230125::log_internal::LogMessage::operator<<(unsigned long))
ld: error: undefined symbol: absl::lts_20230125::log_internal::CheckOpMessageBuilder::CheckOpMessageBuilder(char const*)
>>> referenced by check_op.h:292 (/usr/local/include/absl/log/internal/check_op.h:292)
>>> navmon.pb.o:(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>* absl::lts_20230125::log_internal::MakeCheckOpString<unsigned long, long>(unsigned long, long, char const*))
ld: error: undefined symbol: absl::lts_20230125::log_internal::CheckOpMessageBuilder::ForVar2()
>>> referenced by check_op.h:294 (/usr/local/include/absl/log/internal/check_op.h:294)
>>> navmon.pb.o:(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>* absl::lts_20230125::log_internal::MakeCheckOpString<unsigned long, long>(unsigned long, long, char const*))
ld: error: undefined symbol: absl::lts_20230125::log_internal::CheckOpMessageBuilder::NewString()
>>> referenced by check_op.h:295 (/usr/local/include/absl/log/internal/check_op.h:295)
>>> navmon.pb.o:(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>* absl::lts_20230125::log_internal::MakeCheckOpString<unsigned long, long>(unsigned long, long, char const*))
ld: error: undefined symbol: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>* absl::lts_20230125::log_internal::MakeCheckOpString<long, long>(long, long, char const*)
>>> referenced by check_op.h:340 (/usr/local/include/absl/log/internal/check_op.h:340)
>>> navmon.pb.o:(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>* absl::lts_20230125::log_internal::Check_GEImpl<int, int>(int const&, int const&, char const*))
>>> referenced by check_op.h:341 (/usr/local/include/absl/log/internal/check_op.h:341)
>>> navmon.pb.o:(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>* absl::lts_20230125::log_internal::Check_GTImpl<int, int>(int const&, int const&, char const*))
>>> referenced by check_op.h:339 (/usr/local/include/absl/log/internal/check_op.h:339)
>>> navmon.pb.o:(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>* absl::lts_20230125::log_internal::Check_LTImpl<int, int>(int const&, int const&, char const*))
c++: error: linker command failed with exit code 1 (use -v to see invocation)
diff --git a/Makefile b/Makefile
index 8afa6ef..cad9277 100644
--- a/Makefile
+++ b/Makefile
@@ -134,7 +134,8 @@ rtcmtool: rtcmtool.o navmon.pb.o githash.o ${FMT}/src/format.o bits.o nmmsender
ubxtool: navmon.pb.o ubxtool.o ubx.o bits.o ${FMT}/src/format.o galileo.o gps.o beidou.o navmon.o ephemeris.o $(SIMPLESOCKETS) osen.o githash.o nmmsender.o zstdwrap.o
- $(CXX) -std=gnu++17 $^ -o $@ -L/usr/local/lib -lprotobuf -pthread -lzstd
+ $(CXX) -std=gnu++17 $^ -o $@ -L/usr/local/lib -lprotobuf -pthread -lzstd \
+ -labsl_log_internal_message -labsl_log_internal_check_op
septool: navmon.pb.o septool.o bits.o ${FMT}/src/format.o galileo.o gps.o beidou.o navmon.o ephemeris.o $(SIMPLESOCKETS) osen.o githash.o nmmsender.o zstdwrap.o
$(CXX) -std=gnu++17 $^ -o $@ -L/usr/local/lib -lprotobuf -pthread -lzstd
Apparently, -lprotobuf doesn't pull in abseil libs. Some of the below can be hacked around by explicitly linking against some of the abseil libs, but I'm not sure about one of them.
The hack/workaround: