java-native-interface - 使用 protobuf-cpp 作为 JNI 的依赖项时出错
问题描述
我正在使用libpg_query
Scala。为此,我创建了一个使用 Protobuf 与库通信的 JNI API。不幸的是,由于libpg_query
.
[libprotobuf ERROR google/protobuf/descriptor_database.cc:641] File already exists in database: protobuf/pg_query.proto
[libprotobuf FATAL google/protobuf/descriptor.cc:1371] CHECK failed: GeneratedDatabase()->Add(encoded_file_descriptor, size):
libc++abi.dylib: terminating with uncaught exception of type google::protobuf::FatalException: CHECK failed: GeneratedDatabase()->Add(encoded_file_descriptor, size):
这个错误似乎是众所周知的——通常是由将 Protobuf 生成的源双重链接到单个二进制文件引起的。这会导致生成的类重新初始化和二进制文件崩溃。
就我而言,这可能不是根本原因。我认为这是由于 JNI 库可以从不同的类加载器和 JVM 分支多次加载这一事实引起的——这有很多,因为我使用一个模块中内置的 JNI 函数作为后续执行的宏的一部分模块。
请问,有没有人知道如何descriptor_database
初始化以及我是否可以防止错误在我的场景中发生?
解决方案
推荐阅读
- java - 无法将 Room 设置为使用 RxJava:访问数据库可能会锁定 UI
- php - Laravel 5.6:使用刀片设置变量的最简单方法是什么(不回显它)?
- python - 从网页 API 中抓取数据块
- python - 当我存储一些东西时,Django 复制了我的条目
- ios - Segue 未从自定义 tableView 单元格触发
- c++ - 如何取消长时间运行的 QSqlQuery?
- amazon-web-services - 将 Power BI 连接到 S3 存储桶
- python - Python 如果条件没有按预期工作
- python - 熊猫打开 json 文件 JSON -ValueError: Expected object or value
- java - 尝试调用虚拟方法“java.lang.CharSequence android.widget.TextView.getText()”