Inlcuding a 3rd party library into a plugin

Previously, I have included third party libraries by compiling them outside Unreal and then statically linking against built libraries.

For various reasons, I have been trying to include the library code directly in a plugin. One of the libraries I have been trying to include has been Goolge Protocol Buffers. Conveniently, there is already a project on Github that mostly does what I am trying to do:

However, I have found I can only access the majority of the Protobuf library from code within the specific protobuf plugin. Unreal does not seem to make most of the protobuf symbols available to game code or other plugins. Is this by design? Can I do anything to force Unreal do make additional symbols available in the shared library it creates?

To answer my own question:
Unreal plugins are shared libraries (.dll/.so). Generally it is a bit of a pain to expose C++ objects in a shared library. Things must be explicitly marked with the ‘extern’ keyword. I am guessing the Unreal macros (e.g. UCLASS, UPROPERTY, etc) are doing this under the hood for the Unreal classes.

It is unlikely that open source projects like Protobuf will be setup to function as shared libraries so to get them to function as a shared library within a Unreal plugin is probably not worth the effort.

side note: Google Protobuf can actually be setup to be a shared library, but its ‘not recommended’ and its probably not worth the effort given I want things to be somewhat cross-platform.