这是一个老问题,但我找到了一个可接受的解决方案,也应该是可移植的,我想我应该发布一个答案.解决方案是使用

JNA的

NativeLibrary#getInstance(),因为在Linux上,这将把RTLD_GLOBAL传递给dlopen()(在Windows上不需要).

现在,如果您使用此库来实现Java本机方法,则在调用NativeLibrary#getInstance()之后,还需要在同一个库上调用System.load()(或Sysem.loadLibrary()).

首先,链接到JNA错误:JNA-61

那里的评论说,基本上应该在实际库之前加载依赖关系,以便在JNA中使用,而不是标准的Java方式.我只是复制粘贴我的代码,这是一个典型的场景:

String libPath =

"/path/to/my/lib:" + // My library file

"/usr/local/lib:" + // Libraries lept and tesseract

System.getProperty("java.library.path");

System.setProperty("jna.library.path", libPath);

NativeLibrary.getInstance("lept");

NativeLibrary.getInstance("tesseract");

OcrTesseractInterf ocrInstance = (OcrTesseractInterf)

Native.loadLibrary(OcrTesseractInterf.JNA_LIBRARY_NAME, OcrTesseractInterf.class);

我编写了一个小型库,使用Tesseract为我的Java应用程序提供OCR功能. Tesseract依赖于Leptonica,所以要使用我的库,我需要首先加载库lept和tesseract.使用标准方法(System.load()和System.loadLibrary())加载库不起作用,设置属性jna.library.path或java.library.path也不起作用.显然,JNA喜欢以自己的方式加载库.

这在Linux中适用于我,我想如果设置了正确的库路径,这也适用于其他操作系统.

java库加载,Java:使用依赖项加载共享库相关推荐

  1. Java引入依赖aar,如何将JAR依赖项包含到AAR库中

    摘要: 我有一个依赖于JAR文件的AAR文件,当我构建AAR项目时,它不包含JAR代码. 细节: 我有一个Java SDK库项目,其中包含我们用于Java Web项目的代码,此类库是使用Gradle内 ...

  2. 使用Java 8.0进行类型安全的依赖项注入

    所以我有时真的很想念旧学校的依赖注入. 当Spring仍然"轻量级"时,我们很高兴地使用" 一天学习 " Spring bean xml配置在applicati ...

  3. linux添加自己的库,Linux学习笔记——例叙makefile 增加自定义共享库

    Linux学习笔记--例说makefile 增加自定义共享库 0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己 ...

  4. linux 符号所在库,linux – 即使nm表示该符号存在于共享库中时,也未引用符号

    这可能是错的?我有以下简单的类: #include "libmnl/libmnl.h" int main() { struct mnl_socket *a = mnl_socket ...

  5. Java引入依赖aar_java – 如何将JAR依赖项包含到AAR库中

    概要: 我有一个取决于JAR文件的AAR文件,当我构建AAR项目时,它不包含JAR代码. 细节: 我有一个Java SDK库项目,其中包含我们用于Java Web项目的代码,而且这个库是使用Gradl ...

  6. Java依赖多个版本,java – Gradle中的多个依赖项版本

    要下载同一个库的多个版本: repositories { mavenCentral() } configurations { compile5 compile6 } dependencies { co ...

  7. linux ubuntu dlopen,linux – 使用dlopen()加载共享库时出错

    我正在开发一个程序,在CentOS上使用dlopen加载用户创建的插件.我遇到了一个插件的问题,该插件依赖于也具有依赖关系的共享库: libplugin.so – > libservices.s ...

  8. VC包含目录、附加依赖项、库目录及具体设置

    link 包含目录:#include <headerfile.h>中headerfile.h的搜索目录. 如果有XXX.h找不到,设置这个目录可以解决. 附加依赖项:C++的库会把函数.类 ...

  9. C++ 包含目录、库目录、附加依赖项详解

    在使用opencv库,以及其他库的时候,经常会需要添加包含目录.库目录.附加依赖项等.现做一个总结吧. 1.包含目录 是.h的头文件所在的目录,如果没有正确包含目录,代码中会出现红色的警告,各种未定义 ...

最新文章

  1. 2022-2028年中国低氧铜杆行业市场研究及前瞻分析报告
  2. FPGA从Xilinx的7系列学起(6)
  3. Oracle 块修改跟踪 (Block Change Tracking) 说明
  4. VSCODE更改文件时,提示:EACCES: permission denied的解决办法(ubuntu16.04虚拟机)
  5. java网络编程udp_Java网络编程之UDP
  6. 线性序列机与串口接口DAC驱动设计与验证
  7. 递归算法思路以及题目总结(未完待续...)
  8. TypeScript函数
  9. Error response from daemon: OCI runtime exec failed: exec failed: container_linux.go:345:
  10. windows平台上编写的python无法在unix_在Windows平台上编写的Python程序无法在Unix平台运行?...
  11. 黑群晖二合一已损毁_手动修复黑群晖已损毁磁盘空间
  12. 龙芯3A3000笔记本玩机笔记
  13. uva 10246 Asterix and Obelix(最短路问题拓展 dijkstra)
  14. Android compileSdkVersion27+ was not granted this permission: android.permission.WRITE_SETTINGS.
  15. CGB 2107 2021.8.18 笔记
  16. 【小狗钱钱】—— 送人生一份理财
  17. 3.BootLoader引导启动程序
  18. RoboCup Rescue Simulator Tutorial core
  19. 滴滴和中国优步合并:滴滴才是唯一赢家?
  20. 视频流中实时人脸检测

热门文章

  1. python回文链表_leetcode链表之回文链表
  2. Linux安装redis最新版5.0.8
  3. c语言会出现fullgc,以上述代码为基础,在发生过一次FullGC后,上述代码在He
  4. java实现用户界面的包_在Java中实现用户界面功能的包
  5. windows7关闭计算机对话框,电脑弹出对话框很烦人怎么办?win7禁止对话框弹出的方法...
  6. mysql timestamp 晚8小时_mysql插入timeStamp类型数据时间相差8小时的解决办法
  7. Centos 7 全网备份Rsync
  8. 文件管理服务器主机,通过BlueHost主机文件管理器上传文件
  9. 如何让弹窗不影响主界面_如何压缩视频大小不影响画质
  10. 皮一皮:听说这门专业挺难学...