不知道具体原理,但是,加载 dll 文件时,带路径或者更改 dll 文件的名字,都会报错。虽然库记载成功了,但是处女座认为这不可接受。于是有了这个解决方案。

在根目录为库创建软连接,然后使用 system.loadLibrary(“libname”) 来加载。事实证明,它时认软连接的。

上代码:

import com.seapine.surroundscm.api.*;
import java.lang.UnsupportedOperationException;
import java.lang.SecurityException;
import java.io.IOException;
import java.nio.file.*; public class SurroundSCMAPIExample {
static {
String arch = System.getProperty("sun.arch.data.model"); Path target; if(arch.equals("32"))
{
target = FileSystems.getDefault().getPath("lib","sscmapi.dll");
}
else
{
target = FileSystems.getDefault().getPath("lib64","sscmapi.dll");
} Path link = FileSystems.getDefault().getPath("sscmapi.dll"); try {
Files.deleteIfExists(link);
Files.createSymbolicLink(link, target);
} catch (IOException | UnsupportedOperationException | SecurityException e) {
if (e instanceof SecurityException) {
System.err.println("Permission denied!");
}
if (e instanceof UnsupportedOperationException) {
System.err.println("An unsupported operation was detected!");
}
if (e instanceof IOException) {
System.err.println("An I/O error occurred!");
}
System.err.println(e);
} System.loadLibrary("sscmapi");
} public static void main(String[] args)
{
SSCMContext context = new SSCMContext();
SSCMResult ret = SSCMAPI.connectRSA("localhost",
4900,
"",
"admin",
"",
context); if(SSCMAPI.SSCM_API_OK == ret.result)
System.out.println("Connection Succeeded");
else
System.out.println("Connection Failed: " +
SSCMAPI.getLastError(ret.result)); SSCMAPI.disconnect(context);
}
}

妥妥的,再看不到任何的报错。

不过这个方案有个坑,如果软链接文件是 read-only 的,创建软链接就有麻烦了,所以,在打包,或者是从仓库 get 时,要主要删掉软链接文件。

Java 加载动态库 dll 文件的更多相关文章

  1. Linux下c函数dlopen实现加载动态库so文件代码举例

    dlopen()是一个强大的库函数.该函数将打开一个新库,并把它装入内存.该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的.这种机制使得在系统中添加或者删除一个模块时,都不需要重新编译了. ...

  2. LoadLibrary加载动态库失败

    [1]LoadLibrary加载动态库失败的可能原因以及解决方案: (1)dll动态库文件路径不对.此场景细分为以下几种情况: 1.1 文件路径的确错误.比如:本来欲加载的是A文件夹下的动态库a.dl ...

  3. 【转载】cocos2dx 中 Android NDK 加载动态库的问题

     原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各 ...

  4. Windows平台LoadLibrary加载动态库搜索路径的问题

    一.背景 在给Adobe Premiere/After Effects等后期制作软件开发第三方插件的时候,我们总希望插件依赖的动态库能够脱离插件的位置,单独存储到另外一个地方.这样一方面可以与其他程序 ...

  5. QT常用代码之加载动态库和弹出对话框

    作者:朱金灿 来源:http://blog.csdn.net/clever101 加载动态库的代码: typedef void (*Execute)(); // 定义导出函数类型 QString st ...

  6. QLibrary 加载动态库

    阅读本文大概需要 6.6分钟 一般情况下在没有头文件支持情况下,想要引入某个动态库,最好的办法就是使用「动态加载」的方法,在Qt中一般使用QLibyary来操作 常用 api QLibrary(con ...

  7. JAVA加载Properties配置资源文件

    JAVA加载Properties配置资源文件 制作人:全心全意 配置文件(资源文件):以properties作为拓展名的文件 Java代码是如何加载properties文件的? 必须使用Propert ...

  8. 使用dlopen加载动态库

    目录 概述 接口 C CMakeLists.txt src/main.c src/add.c ./dlopen_test C++ CMakeLists.txt src/main.cpp src/add ...

  9. QT/C++插件式框架、利用智能指针管理内存空间的实现、动态加载动态库文件

    QT.C++插件式框架.主要原理还是 动态库的动态加载. dlopen()函数.下面为动态加载拿到Plugininstance对应指针.void**pp=(void**)dlsym(handle,&q ...

随机推荐

  1. shell $x的含义

    linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...

  2. 第一部分day2-for、while、数据类型(字符串、列表、元组)

    数据类型 数据类型的初识 1.数字 整数 int (integer) 整型 (注:python3 不区分整型和长整型,统一称之为整型) 长整型 float(浮点型) complex(复数) 是由实数和 ...

  3. 【转】Pandas学习笔记(二)选择数据

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  4. hdu5285-wyh2000 and pupil-(染色法二分图判定)

    http://acm.hdu.edu.cn/showproblem.php?pid=5285 题意:把互不认识的人分到两个组,第一组人数尽可能多. 题解:把互不认识的人连起来,当作二分图,二分图可能有 ...

  5. Linux中一些命令的区别

    1. yum provides 和 yum search provides是在文件中查找软件,类似于rpm -qf: search是查找软件包或其描述的关键字. 2. gzip  和  bzip2 对 ...

  6. 修改了celery任务老是执行失败,跟shell中调试的结果不同

    因为没有重启celery,没有删除celerybeat-schedule,导致使用的task任务一直是原来缓存的,所以代码一直无法生效,也是日了狗了

  7. [NOI2010]超级钢琴 主席树

    [NOI2010]超级钢琴 链接 luogu 思路 和12省联考的异或粽子一样. 堆维护n个左端点,每次取出来再放回去次 代码 #include <bits/stdc++.h> #defi ...

  8. 【线段树】【P5522】[yLOI2019] 棠梨煎雪

    C [yLOI2019] 棠梨煎雪 Background 岁岁花藻檐下共将棠梨煎雪 自总角至你我某日辗转天边 天淡天青 宿雨沾襟 一年一会信笺却只见寥寥数言 --银临<棠梨煎雪> Desc ...

  9. VQA视觉问答基础知识

    本文记录简单了解VQA的过程,目的是以此学习图像和文本的特征预处理.嵌入以及如何设计分类loss等等. 参考资料: https://zhuanlan.zhihu.com/p/40704719 http ...

  10. gethostbyaddr

    函数原型: #include<netdb.h> struct hostent * gethostbyaddr(const char *addr, socklen_t len, int fa ...