You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse中JNI调用C++ std::string时报UnsatisfiedLinkError找不到依赖库

问题根因

你遇到的报错和头文件无关,头文件仅保证编译阶段通过,运行阶段报错是因为你的C动态库依赖C标准运行时库,系统无法找到对应的库文件:

  • 不使用std::string时,你的代码没有触发对C++标准库的依赖,动态库仅依赖基础系统组件,因此可以正常加载
  • 使用std::string后,动态库新增了对C++标准运行时库的依赖,缺少该文件就会触发Can't find dependent libraries错误

解决方案

根据你使用的编译器不同,对应操作如下:

如果你使用MinGW编译(你的dll命名为libnative_cpp.dll,大概率为该情况)

方案1:静态链接C++标准库(最推荐)

将C++标准库直接打包进你的动态库,不需要额外携带依赖文件:

  • 打开Eclipse的C++项目构建设置,找到MinGW C++ Linker -> Miscellaneous选项
  • 在Linker flags中添加参数:-static-libstdc++ -static-libgcc
  • 重新编译生成动态库即可

方案2:补齐依赖库

  • 找到MinGW安装目录下的bin文件夹,复制libstdc++-6.dll、libgcc_s_seh-1.dll(64位)或libgcc_s_dw2-1.dll(32位)到你的libnative_cpp.dll同目录
  • 或者将MinGW的bin目录添加到系统环境变量PATH中,重启Java运行环境生效

如果你使用MSVC编译

方案1:静态链接运行时

  • 打开Visual Studio项目属性,依次进入C/C++ -> 代码生成
  • Debug版将运行库改为多线程调试(/MTd),Release版改为多线程(/MT)
  • 重新编译生成动态库即可

方案2:补齐依赖库

  • 安装对应版本的VC++可再发行组件包,或者将编译环境下的vcruntimexxx.dll、msvcpxxx.dll复制到动态库同目录

验证方法

你可以使用dumpbin /dependents libnative_cpp.dll命令,或者Dependency Walker工具查看动态库的所有依赖项,确认缺少的库文件后补齐即可。

注意:不要将Debug版的动态库用于分发,Debug版的标准库依赖仅在安装了对应编译器的设备上存在,正式使用请编译Release版。

内容的提问来源于stack exchange,提问作者Auro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:09:03