google / cel-cpp

Fast, portable, non-Turing complete expression evaluation (C++)
https://cel.dev
Apache License 2.0
171 stars 51 forks source link

Missing definitions from 0.9.0 #205

Open Alfus opened 1 year ago

Alfus commented 1 year ago

When trying to compile against master I am getting the following linker errors:

Undefined symbols for architecture arm64:
  "cel::base_internal::MessageTypeFieldCount(unsigned long)", referenced from:
      cel::base_internal::LegacyStructType::field_count() const in libdata.a(struct_type.o)
  "cel::interop_internal::ProtoStructValueToMessageWrapper(cel::Value const&)", referenced from:
      cel::interop_internal::ToLegacyValue(google::protobuf::Arena*, cel::Handle<cel::Value> const&, bool) in libinterop.a(interop.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I don't see a definition for the first one: https://github.com/search?q=repo%3Agoogle%2Fcel-cpp%20MessageTypeFieldCount&type=code

Though the second one seems to be defined here: https://github.com/google/cel-cpp/blob/58397d797f2c98e2450e5b1df3d5b2048f1e7499/extensions/protobuf/struct_value.cc#L74 though without the ABSL_ATTRIBUTE_WEAK

Alfus commented 1 year ago

The first one seems to be just missing, the second one seems to be a cycle in the dep graph, that is being 'solved' via ABSL_ATTRIBUTE_WEAK:

// ABSL_ATTRIBUTE_WEAK
//
// Tags a function as weak for the purposes of compilation and linking.
// Weak attributes did not work properly in LLVM's Windows backend before
// 9.0.0, so disable them there. See https://bugs.llvm.org/show_bug.cgi?id=37598
// for further information.
// The MinGW compiler doesn't complain about the weak attribute until the link
// step, presumably because Windows doesn't use ELF binaries.

I suspect the problem with the second one is, the xcode linker used on macos does not respect the weak attribute.