-
Notifications
You must be signed in to change notification settings - Fork 15.5k
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
Several shared object using same proto leading the the error: file already exists in database #1489
Comments
I believe the way we use globals in protobuf makes it impossible to link protos into separate dynamic libs and have protos in their public interfaces. The "file already exists in database" error is not hard to fix but I'm pretty sure that's not the only error you will see. I think you either need to avoid linking protos into separate .so, or try to use protobuf-lite where we don't have as much globals as we have for full runtime. |
I had the same issue on windows7,I have a project that have an c++ executable core, and an shared objects (dll),When the core launches, it will load the library with LoadLibrary , it crushes with error. |
@gkl23 |
- when compiling protos into a shared library, the shared library can not be reloaded: protocolbuffers/protobuf#4126 - it is not recommended to have multiple shared libraries with protos compiled in them: protocolbuffers/protobuf#1489 Signed-off-by: László Várady <[email protected]>
- when compiling protos into a shared library, the shared library can not be reloaded: protocolbuffers/protobuf#4126 - it is not recommended to have multiple shared libraries with protos compiled in them: protocolbuffers/protobuf#1489 Signed-off-by: László Várady <[email protected]>
- when compiling protos into a shared library, the shared library can not be reloaded: protocolbuffers/protobuf#4126 - it is not recommended to have multiple shared libraries with protos compiled in them: protocolbuffers/protobuf#1489 Signed-off-by: László Várady <[email protected]>
- when compiling protos into a shared library, the shared library can not be reloaded: protocolbuffers/protobuf#4126 - it is not recommended to have multiple shared libraries with protos compiled in them: protocolbuffers/protobuf#1489 Signed-off-by: László Várady <[email protected]>
- when compiling protos into a shared library, the shared library can not be reloaded: protocolbuffers/protobuf#4126 - it is not recommended to have multiple shared libraries with protos compiled in them: protocolbuffers/protobuf#1489 Signed-off-by: László Várady <[email protected]>
- when compiling protos into a shared library, the shared library can not be reloaded: protocolbuffers/protobuf#4126 - it is not recommended to have multiple shared libraries with protos compiled in them: protocolbuffers/protobuf#1489 Signed-off-by: László Várady <[email protected]>
- when compiling protos into a shared library, the shared library can not be reloaded: protocolbuffers/protobuf#4126 - it is not recommended to have multiple shared libraries with protos compiled in them: protocolbuffers/protobuf#1489 Signed-off-by: László Várady <[email protected]>
- when compiling protos into a shared library, the shared library can not be reloaded: protocolbuffers/protobuf#4126 - it is not recommended to have multiple shared libraries with protos compiled in them: protocolbuffers/protobuf#1489 Signed-off-by: László Várady <[email protected]>
- when compiling protos into a shared library, the shared library can not be reloaded: protocolbuffers/protobuf#4126 - it is not recommended to have multiple shared libraries with protos compiled in them: protocolbuffers/protobuf#1489 Signed-off-by: László Várady <[email protected]>
- when compiling protos into a shared library, the shared library can not be reloaded: protocolbuffers/protobuf#4126 - it is not recommended to have multiple shared libraries with protos compiled in them: protocolbuffers/protobuf#1489 Signed-off-by: László Várady <[email protected]>
I have a project that have an c++ executable core, and several shared objects (.so, .dll) called plugins. When the core launches, it will load those plugins with dlopen. The core and plugins using protobuf as communication protocol, so they have to compile the generated .pb.cc and .ph.b files into their binaries to have the copy of the serializer/deserializer. And libprotobuf.so link to both the core and plugins. When I launch the core, it crushes with error: file already exists in database, same error in #863
I'm using protobuf-3 beta2, and Ubuntu 14.04. This error only happens on Linux. The program works fine on Windows and OS X.
I have also tried another way which compile all the generated protobuf files into a dynamic library (protocol.so), then the core and plugins were linked to protocol.so and libprotobuf.so. This works fine. Of course, because in #1062 the bug has been fixed. But when I changed the protocol.so into protocol.a, it failed again. I think it is same as compile generated .pb.cc separately.
I don't want to compile a protocol.so, because it is inconvenient for me to extend the communication protocol when I add more and more plugins. I think compile the generated .pb.cc into the plugin's binary is better (this work well on windows and OS X).
Any suggestions to fix this error are appreciated.
The text was updated successfully, but these errors were encountered: