从 java 加载库时出现“未定义符号:__cxa_pure_virtual”错误

2024-03-22

我有一个 Java 程序,需要加载本机代码库(通过 JNI 和 SWIG),但是当我尝试运行它时,出现如下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/local/lib/libmyapp_jni.so.0.0.0: /usr/local/lib/libmyapp_jni.so.0.0.0: undefined symbol: __cxa_pure_virtual
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1939)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1864)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854)
    at java.lang.Runtime.loadLibrary0(Runtime.java:845)
    at java.lang.System.loadLibrary(System.java:1084)
    at org.myapp.myapp.main(myapp.java:11)

通过使用 ldd -d /usr/local/lib/libmyapp_jni.so.0.0.0

$ldd -d /usr/local/lib/libmyapp_jni.so.0
    linux-vdso.so.1 =>  (0x00007ffffedfe000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007feacde2a000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007feacdc26000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007feacda0e000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007feacd7f8000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feacd42f000)
    /lib64/ld-linux-x86-64.so.2 (0x00007feace5a2000)
undefined symbol: __cxa_pure_virtual    (/usr/local/lib/libmyapp_jni.so.0)
undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE  (/usr/local/lib/libmyapp_jni.so.0)
undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE (/usr/local/lib/libmyapp_jni.so.0)
undefined symbol: _ZTVN10__cxxabiv121__vmi_class_type_infoE (/usr/local/lib/libmyapp_jni.so.0)
undefined symbol: _ZSt7nothrow  (/usr/local/lib/libmyapp_jni.so.0)
undefined symbol: __gxx_personality_v0  (/usr/local/lib/libmyapp_jni.so.0)

我真的想知道哪里出了问题?

有什么想法吗?

非常感谢。


在重新检查了与我在 stackoverflow 上的问题相关的所有答案后,我找到了答案马克·西伯恩 https://stackoverflow.com/users/443562/mark-seaborn质疑:__cxa_pure_virtual 的目的是什么? https://stackoverflow.com/questions/920500/what-is-the-purpose-of-cxa-pure-virtual解决了我的问题。

由于我的jni库是由autotools管理的,在Makefile.am的AM_LDFLAGS中添加“-Wl,--gc-sections -fPIC -shared -lstdc++”后问题解决了。如果代码由 C++ 编译器(例如 g++)编译,则 libstdc++ 可能不需要。

希望这可以帮助其他有同样问题的人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 java 加载库时出现“未定义符号:__cxa_pure_virtual”错误 的相关文章

随机推荐

  • 是否可以在 java jit 上使用 Final boolean 删除跳转?

    正如我们所知 有些人说 java JIT 比 C 更快 我有一些想法 可以利用 JIT 并在运行时代码中删除一些指令 这是我尝试过的示例代码 Created by kadirbasol on 4 6 14 public class Remo
  • jqplot 不同折线图的荧光笔

    我有一系列折线图jqPlot图表 我想要做的是关闭所有图表的突出显示 除了我想要突出显示的一张图表 我怎样才能做到这一点 我还没有一个很好的例子来说明如何做到这一点 也没有时间做一个 但我会在完成时更新 在所有事件中 荧光笔插件都会为每个系
  • PrestaShop:生产前删除所有测试数据

    我正在搜索一个在 MySql 上运行的脚本 以删除 截断表 PrestaShop 数据库版本 1 4 9 上的所有测试数据 客户 订单 购物车等 感谢 帕斯卡 安装 Prestashop Cleaner 并在配置中您可以选择删除目录 订单和
  • RestAssured:如何禁用 PreAuthorize

    我正在使用 RestAssured 测试 API 我调用的方法使用下一个注释 PreAuthorize hasAnyRole ROLE1 ROLE2 ROLE3 我的测试类包含用于测试的活动配置文件 对于测试配置 我们使用 yaml 文件
  • 在 AngularJS 中使用“scope”从另一个控制器调用一个控制器的方法

    我试图通过使用在第一个控制器中调用第二个控制器的方法scope多变的 这是我的第一个控制器中的方法 scope initRestId function var catapp document getElementById SecondApp
  • Haskell 中的字符串格式化

    Haskell 相当于什么 string str string Format 0 1 10 20 C 有一个Printf https hackage haskell org package base docs Text Printf htm
  • 如何制作多列无序列表?

    我正在尝试创建一个如下所示的项目列表 主要要求是列表应该灵活 可以在不接触代码的情况下添加或删除列表项 到目前为止我发现的最好的解决方案是将所有列表项 包括标题 放入 li 标记并使用本文中介绍的技术之一对其进行样式设置分开列出文章 htt
  • 重写 URL 并使新 URL 显示在地址栏中

    我使用下面的代码来重写一些 URL RewriteEngine On Options FollowSymlinks RewriteBase RewriteRule New Hampshire a zA Z0 9 s html NH 请记住
  • 如何在 DLL 边界上公开 STL 列表?

    我有一个 DLL 需要访问主机应用程序中 STL 容器中存储的数据 因为 C 没有标准的 ABI 而且我想支持不同的编译器 所以应用程序和 DLL 之间的接口基本上必须保持普通旧数据 对于向量来说 这相对简单 您可以简单地返回向量的内存块
  • 如何在Python中的setup.py中包含并安装本地依赖项?

    我正在创建一个setup py分发我的应用程序 该应用程序有许多可以通过 pip 安装的依赖项 它还有一些无法从 PyPI 安装的自定义依赖项 所以 我创建了一个custom package 0 1 whl它将包含在发行版中 并且必须在之后
  • XMPP - 名册订阅说明

    假设我的 Jabber 服务器上有 2 个用户 Alice 和 Bob 添加到名册中并订阅为both 我需要执行以下步骤 Alice 向 Bob 发送订阅请求 当 Bob 收到请求时 他会批准该请求 Bob 可能也对 Alice 的存在感兴
  • 将 2 个参数 Lambda 表达式转换为 1 个参数 Lambda 表达式(指定一个参数)

    我有表情 Expression
  • PHP-从字符串中删除所有制表符

    我可以从字符串中删除所有单个选项卡 Copying and pasting the tab directly txt str replace txt 这只会删除单个选项卡 但不会删除双选项卡 然后我尝试了这个 认为 t 足以找到选项卡 tx
  • Django Rest Framework 不允许我拥有多个权限

    我的 Django Rest 框架和权限有问题 例如 DRF 不允许我对我的观点拥有多个权限 如果我以管理员用户身份登录 API 我可以使用此 mixin 进行访问 class PermissionMixin object permissi
  • 博客中最常见的 3 页序列

    给定一个由字段 用户 页面 url 组成的网络日志 我们必须找出用户最常使用的 3 页序列 有一个时间戳 并且不能保证单个用户访问将按顺序记录 它可能像 user1 Page1 user2 Pagex user1 Page2 User10
  • 如何通过telnet发送POST请求

    我想知道如何向服务器 例如 Google 搜索 发送 POST 请求 我已经知道如何发送 GET 请求 例如 GET http www google com 我尝试这样做 POST wikipedia or POST wikipedia o
  • 用于编译程序的 G++ -I 选项

    这里有一个小问题 对于我这样一个Linux程序新手来说是无法解决的 现在我有一个需要编译的main cpp程序 有一个 include Down h 在文件的前面 实际上 这个头文件存在于另一个目录中 位于 include目录 另外 Dow
  • DAX 度量:动态地仅首先考虑每个组,然后总体返回其计数

    我们正在努力解决一个可能比我想象的更简单的问题 我只是被困住了 问题包括定义一个DAX Measure that 动态地仅计数first期间访问量对于每位患者 访问次数是不是第一期间必须是分配空白 价值 在讨论目标之前 请让我介绍一下场景
  • 数据库传输/服务器设置期间波兰字符集出现编码错误

    我正在尝试将我的一个数据库从一台主机 home pl 传输到另一台主机 我新设置的服务器 我试图传输的脚本是wordpress 不幸的是 无论使用哪种方法 我都在努力解决编码问题 新主机配置 在我的新服务器中 我在 my cnf 中使用以下
  • 从 java 加载库时出现“未定义符号:__cxa_pure_virtual”错误

    我有一个 Java 程序 需要加载本机代码库 通过 JNI 和 SWIG 但是当我尝试运行它时 出现如下错误 Exception in thread main java lang UnsatisfiedLinkError usr local