Open
Description
Both native and wrapped proto_casters use several functions from proto_cast_util.cc
. Unfortunately, most of these functions are not actually usable, as the pybind11 default hidden
visibility is propagated to these functions.
This can be verified by analyzing the generated object file:
> readelf -a -CW ./build/CMakeFiles/pybind11_native_proto_caster.dir/pybind11_protobuf/proto_cast_util.cc.o | grep -E 'FUNC .*GLOBAL' 592: 0000000000001630 41 FUNC GLOBAL HIDDEN 160 pybind11_protobuf::PyBytesAsStringView(pybind11::bytes)
593: 0000000000001660 3 FUNC GLOBAL HIDDEN 160 pybind11_protobuf::PyProtoGetCppMessagePointer(pybind11::handle)
594: 0000000000001670 172 FUNC GLOBAL HIDDEN 160 pybind11_protobuf::PyProtoDescriptorFullName[abi:cxx11](pybind11::handle)
595: 0000000000001720 158 FUNC GLOBAL HIDDEN 160 pybind11_protobuf::PyProtoHasMatchingFullName(pybind11::handle, google::protobuf::Descriptor const*)
748: 0000000000001ed0 1090 FUNC GLOBAL HIDDEN 160 pybind11_protobuf::PyProtoSerializePartialToString(pybind11::handle, bool)
829: 00000000000029e0 457 FUNC GLOBAL HIDDEN 160 pybind11_protobuf::CProtoCopyToPyProto(google::protobuf::Message*, pybind11::handle)
839: 0000000000003790 1089 FUNC GLOBAL HIDDEN 160 pybind11_protobuf::AllocateCProtoFromPythonSymbolDatabase(pybind11::handle, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
845: 0000000000003be0 104 FUNC GLOBAL DEFAULT 160 pybind11_protobuf::InitializePybindProtoCastUtil()
846: 0000000000003c50 274 FUNC GLOBAL DEFAULT 160 pybind11_protobuf::ImportProtoDescriptorModule(google::protobuf::Descriptor const*)
847: 00000000000041b0 201 FUNC GLOBAL HIDDEN 160 pybind11_protobuf::GenericPyProtoCast(google::protobuf::Message*, pybind11::return_value_policy, pybind11::handle, bool)
848: 0000000000004280 8 FUNC GLOBAL HIDDEN 160 pybind11_protobuf::GenericProtoCast(google::protobuf::Message*, pybind11::return_value_policy, pybind11::handle, bool)
All method using a parameter from the pybind11::
namespace becomes "hidden", and when linking the object file into the shared library the HIDDEN symbols are omitted from the symbol table.
google-or-tools
e.g. patches the pybind11_protobuf build to create a static library (which is not affected by symbol visibility) to work around this problem:
https://github.com/google/or-tools/blob/2384738a951561bf905f3435651310841c309b4c/patches/pybind11_protobuf.patch#L32
Metadata
Metadata
Assignees
Labels
No labels