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

Fix undefined symbol error around SharedCtor() #8827

Merged
merged 2 commits into from Jul 29, 2021

Commits on Jul 20, 2021

  1. Fix undefined symbol error around SharedCtor()

    Apparently, protocolbuffers#8532 was incorrect if applied to 3.17.x branch.
    
    3.17.x changed code generation to mark `SharedCtor()` and `SharedDtor()` as inline in .pb.cc.
    
    It looks like we have a compile-time undefined behavior in C++ now. As cppreference.com [says](https://en.cppreference.com/w/cpp/language/inline):
    
    _The definition of an inline function <...> must be reachable in the translation unit where it is accessed (not necessarily before the point of access)._
    
    As protobuf allows custom plugins to generate custom code, there is no limitation on where SharedCtor couble be possible referenced from. In our case we have SharedCtor invoked from corresponding `.pb.h` code, thus triggering:
    ```
    ld: error: undefined symbol: package::Message::SharedCtor()`
    >>> referenced by file.pb.h:$$$$
    ```
    
    If this patch is not applicable, I can take a look into changing the code generation, but doing this will be harder then removing _inline_.
    georgthegreat committed Jul 20, 2021
    Copy the full SHA
    201c710 View commit details
    Browse the repository at this point in the history
  2. Copy the full SHA
    adac182 View commit details
    Browse the repository at this point in the history