- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 jni4net 和我们的供应商提供的一些 dll 创建一个应用程序(也就是说我无法控制 dll)。
在我的 IDE (Eclipse) 中开发程序时,我只是将 jni4net jar 和关联的 dll 放入工作区的项目文件夹中。
[IDE中项目目录][1]
程序在 IDE 中运行良好:
fs() throws IOException {
Bridge.setVerbose(true);
Bridge.init();
Bridge.LoadAndRegisterAssemblyFrom(new java.io.File("Kratos_3.j4n.dll"));
Bridge.LoadAndRegisterAssemblyFrom(new java.io.File("Kratos_3.dll"));
fsod = new FactSetOnDemand();
}
输出:
> loading core from C:\Users\therka\workspace - Copy\instHolders\jni4net.n-0.8.3.0.dll
loading jni4net.n-0.8.3.0, Version=0.8.3.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxx from C:\Users\therka\workspace - Copy\instHolders\jni4net.n-0.8.3.0.dll
loaded jni4net.n-0.8.3.0, Version=0.8.3.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxx from C:\Users\therka\workspace - Copy\instHolders\jni4net.n-0.8.3.0.dll
Initialized jni4net core
core loaded from C:\Users\therka\workspace - Copy\instHolders\jni4net.n-0.8.3.0.dll
loading Kratos_3.j4n, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null from C:\Users\therka\workspace - Copy\instHolders\Kratos_3.j4n.dll
loaded Kratos_3.j4n, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null from C:\Users\therka\workspace - Copy\instHolders\Kratos_3.j4n.dll
loading Kratos_3, Version=3.5.0.0, Culture=neutral, PublicKeyToken=null from C:\Users\therka\workspace - Copy\instHolders\Kratos_3.dll
loaded Kratos_3, Version=3.5.0.0, Culture=neutral, PublicKeyToken=null from C:\Users\therka\workspace - Copy\instHolders\Kratos_3.dll
现在,当我从 IDE 导出到可运行的 JAR 时,我选择“将所需的库复制到生成的 JAR 旁边的子文件夹”选项。在 jar 现在所在的目录中,我放置了所有库和 dll,并从命令提示符运行它。
> C:\instHolder>java -jar instHolder.jar
09-29-17 (03:42:12 PM): 317 clients retreived...
09-29-17 (03:42:12 PM): Confirming JVM version: 64
09-29-17 (03:42:12 PM): Java Version confirmation: 1.8.0_144
09-29-17 (03:42:12 PM): setting verbose
loading core from C:\instHolder\instHolder_lib\jni4net.n-0.8.3.0.dll
loading jni4net.n-0.8.3.0, Version=0.8.3.0, Culture=neutral, PublicKeyToken=xxxxxxxxxx
from C:\instHolder\instHolder_lib\jni4net.n-0.8.3.0.dll
loaded jni4net.n-0.8.3.0, Version=0.8.3.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxfrom C:\instHolder\instHolder_lib\jni4net.n-0.8.3.0.dll
Initialized jni4net core
core loaded from C:\instHolder\instHolder_lib\jni4net.n-0.8.3.0.dll
09-29-17 (03:42:13 PM): setting j4n
loading Kratos_3.j4n, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null from C:\instHolder\Kratos_3.j4n.dll
loaded Kratos_3.j4n, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null from C:\instHolder\Kratos_3.j4n.dll
09-29-17 (03:42:13 PM): setting 3
loading Kratos_3, Version=3.5.0.0, Culture=neutral, PublicKeyToken=null from C:\instHolder\Kratos_3.dll
loaded Kratos_3, Version=3.5.0.0, Culture=neutral, PublicKeyToken=null from C:\instHolder\Kratos_3.dll
09-29-17 (03:42:13 PM): Press Enter key to continue onto FSOD...
Exception in thread "main" java.lang.UnsatisfiedLinkError: kratos_3.runtimeplatform.FactSetOnDemand.__ctorFactSetOnDemand0(Lnet/sf/jni4net/inj/IClrProxy;)V
at kratos_3.runtimeplatform.FactSetOnDemand.__ctorFactSetOnDemand0(Native Method)
at kratos_3.runtimeplatform.FactSetOnDemand.<init>(FactSetOnDemand.java:25)
at instHolders.fs.<init>(fs.java:46)
at instHolders.init.main(init.java:44)
一旦我创建了一个新的 FactSetOnDemand 对象(上面代码示例的最后一行),程序就会崩溃
我还将库和 dll 提供给命令行参数并收到相同的错误
java -jar instHolder.jar -Dfile.encoding=Cp1252 -classpath""C:\instHolders\bin;C:\Users\therka\Desktop\JavaAPIs\SQLServer\jtds-1.3.1.jar;C:\Users\therka\Desktop\JavaAPIs\Apache\Commons\commons-net-3.3.jar;C:\Users\therka\Desktop\JavaAPIs\commons-lang3-3.4-bin\commons-lang3-3.4\commons-lang3-3.4.jar;C:\Users\therka\Desktop\JavaAPIs\Apache\IO\commons-io-2.4.jar;C:\Users\therka\Desktop\JavaAPIs\MySQL\mysql-connector-java-5.1.30.jar;C:\instHolders\jni4net.j-0.8.3.0.jar;C:\instHolders\Kratos_3.j4n.jar;C:\instHolder\Kratos_3.dll;C:\instHolder\Kratos_3.j4n.dll;C:\instHolder\jni4net.n-0.8.3.0.dll"" instHolders.init
最终导致相同的未满足链接错误。
有人可以为我指明正确的方向吗?我很确定这是因为我的导出选项和最终的目录布局。
非常感谢!
编辑:
在我的头撞到墙上后仍然无法让它工作,我在 IDE 和命令提示符 .jar 中添加了一个进程监视器 - 由此我能够获得两者都使用的命令行参数(见下文) .
COMMAND LINE ARGUMENTS-Parent PID: 10988, Command line: java -jar instHolder.jar -Dfile.encoding=Cp1252 -classpath "C:\instHolders\bin;C:\Users\therka\Desktop\Java APIs\SQL Server\jtds-1.3.1.jar;C:\Users\therka\Desktop\Java APIs\Apache\Commons\commons-net-3.3.jar;C:\Users\therka\Desktop\Java APIs\commons-lang3-3.4-bin\commons-lang3-3.4\commons-lang3-3.4.jar;C:\Users\therka\Desktop\Java APIs\Apache\IO\commons-io-2.4.jar;C:\Users\therka\Desktop\Java APIs\MySQL\mysql-connector-java-5.1.30.jar;C:\instHolders\jni4net.j-0.8.3.0.jar;C:\instHolders\Kratos_3.j4n.jar" instHolders.init, Current directory: C:\instHolder\, Environment:
=C:=C:\instHolder
=ExitCode=00000001
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\therka\AppData\Roaming
asl.log=Destination=file
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=xxxxxxxxxxx
ComSpec=C:\Windows\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=P:
HOMEPATH=\
HOMESHARE=\\xxxxx-fp\data\Users\xxxxx
LOCALAPPDATA=C:\Users\therka\AppData\Local
LOGONSERVER=\\xxxxx
NUMBER_OF_PROCESSORS=4
OS=Windows_NT
Path=C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\oracle\product\10.2.0\client_1\bin;C:\Program Files (x86)\Sybase\Shared\PowerBuilder\;C:\Program Files (x86)\Sybase\Shared\PowerBuilder\;C:\Program Files\Java\jre7\bin\javaw.exe
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 58 Stepping 9, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=3a09
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\xxxxx\AppData\Local\Temp
TMP=C:\Users\xxxxx\AppData\Local\Temp
USERDNSDOMAIN=xxxxxxxxxxx .xxxxxxxxxxx
USERDOMAIN=xxxxxxxxxxx
USERNAME=xxxxx
USERPROFILE=C:\Users\xxxxx
windir=C:\Windows
开发环境
"IDE ARGUMENTS - Parent PID: 9696, Command line: ""C:\Program Files\Java\jre1.8.0_141\bin\javaw.exe"" -Dfile.encoding=Cp1252 -classpath ""C:\Users\xxxxx\workspace - Copy\instHolders\bin;C:\Users\xxxxx\Desktop\Java APIs\SQL Server\jtds-1.3.1.jar;C:\Users\xxxxx\Desktop\Java APIs\Apache\Commons\commons-net-3.3.jar;C:\Users\xxxxx\Desktop\Java APIs\commons-lang3-3.4-bin\commons-lang3-3.4\commons-lang3-3.4.jar;C:\Users\xxxxx\Desktop\Java APIs\Apache\IO\commons-io-2.4.jar;C:\Users\xxxxx\Desktop\Java APIs\MySQL\mysql-connector-java-5.1.30.jar;C:\Users\xxxxx\workspace - Copy\instHolders\jni4net.j-0.8.3.0.jar;C:\Users\xxxxx\workspace - Copy\instHolders\Kratos_3.j4n.jar"" instHolders.init ""-Djava.library.path=c:\instHolder"", Current directory: C:\Users\xxxxx\workspace - Copy\instHolders\, Environment:
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\xxxxx\AppData\Roaming
asl.log=Destination=file
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=xxxxxxxxxxx
ComSpec=C:\Windows\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=P:
HOMEPATH=\
HOMESHARE=\\xxxxx-fp\data\Users\xxxxx
LOCALAPPDATA=C:\Users\xxxxx\AppData\Local
LOGONSERVER=\\xxxxx
NUMBER_OF_PROCESSORS=4
OS=Windows_NT
Path=C:/Program Files/Java/jre1.8.0_144/bin/server;C:/Program Files/Java/jre1.8.0_144/bin;C:/Program Files/Java/jre1.8.0_144/lib/amd64;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\oracle\product\10.2.0\client_1\bin;C:\Program Files (x86)\Sybase\Shared\PowerBuilder\;C:\program files\java\jdk1.8.0_141\bin;C:\Program Files (x86)\Sybase\Shared\PowerBuilder\;C:\Program Files\Java\jre7\bin\javaw.exe;C:\Windows\system32;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 58 Stepping 9, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=3a09
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\xxxxx\AppData\Local\Temp
TMP=C:\Users\xxxxx\AppData\Local\Temp
USERDNSDOMAIN=xxxxxxxxxxx
USERDOMAIN=xxxxxxxxxxx
USERNAME=xxxxx
USERPROFILE=C:\Users\xxxxx
windir=C:\Windows"
我还可以从进程监视器中看到,当 .jar 将 dll 解压缩到类中然后使用 FactSetOnDemand.class 时,潜在的问题正在发生。
为 IDE 处理 Montiro 输出 IDE Process Monitor Output您可以看到它成功运行并创建了必要的类。
可运行 .jar 的进程监视器输出 Command Line Process Monitor Output这无法创建类。
最佳答案
经过一周的无所作为后,我在供应商开发人员的帮助下解决了我的问题(感谢 Adrian!)。
最终我的问题是多种因素的结合:
首先,我使用选项“将所需的库复制到生成的 .jar 旁边的子文件夹”错误地导出了我的代码。正确的选择是使用可运行的 .jar 将库打包到生成的 .jar 中。
其次,我创建了一个文件夹并将可运行的 .jar 导出到其中。在该文件夹中,我创建了一个名为 lib (dosnt matter) 的子文件夹,其中包含运行程序所需的 .dll。
第三,我修改了我的代码如下:
Bridge.setVerbose(true);
Bridge.init(new File("C:\\Users\\therka\\Desktop\\jar\\lib\\jni4net.n.w64.v40-0.8.3.0.dll"));
Bridge.LoadAndRegisterAssemblyFrom(new java.io.File("C:\\Users\\therka\\Desktop\\jar\\lib\\Kratos_3.j4n.dll"));
fsod = new FactSetOnDemand();
jni4net Bridge.init 和 Bridge.LoadAndRegisterAssembly 的路径必须指向包含 .dll 的/lib/文件夹。以前我没有指定目录,结果找不到 .dll(导致 unsatisifedLinkerror)。
现在您只需要打开命令提示符,cd 到包含 .jar 的目录,然后 -java -jar 即可运行。
希望这能让别人免去我必须经历的头痛。
关于Java - jni4net Bridge - 部署带有 dll 依赖项的 Jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46496052/
我在 *.sql 文件中得到了我的数据库转储(表、函数、触发器等)。此时我正在通过 jenkins 部署它们,通过传递执行 shell 命令: sudo -u postgres psql -d my_
我正在使用网络部署 API 来部署网络包(.zip 文件,由 MSDeploy.exe 创建)以编程方式将包发布到服务器(在发布包之前我们需要做一些其他事情这就是为什么我们不使用 MSDeploy.e
我们正在使用 Web Deploy 3 的(几乎完全未记录的)“公共(public) API”来创建我们网站的 .zip 包,然后将其同步到服务器: DeploymentBaseOptions des
将 clojure 应用程序制作成可执行文件的最简单方法是什么,例如 http://rawr.rubyforge.org/ ruby 吗? (exe 和 app 文件也是) 最佳答案 使用 leini
是否可以下载 Android 源代码并针对任何设备进行编译? 我想做的是尝试 GSM 代码部分并编译操作系统并将其部署到我的摩托罗拉手机上。 谢谢! 最佳答案 是的,但这很难,因为大多数手机不共享驱动
我正在考虑用 c/c++ 编写需要在大多数个人计算机上运行的 nbody 样式模拟。本质上是一个 O(n^2) 粒子模拟器。 因为这需要相当用户友好,所以我希望有 1 个不需要用户安装任何东西的 Wi
需要了解 kubernetes 部署中 kube_deployment_status_replicas 和 kube_deployment_spec_replicas 指标的区别 最佳答案 简而言之,
我正在尝试使用分类器部署 Maven Artifact 。由于我需要源代码和 JAR(我从 GWT 使用它),我想获得 artifact-version-classifier.jar 和 artifa
我设置部署以将我的项目代码与存储我的网站的 FTP 服务器上的项目同步。 但是,每次尝试同步时,我总是必须登录。 我什至检查了记住,但它不起作用! 我正在使用最新的 PhpStorm 2017.1.4
我在 Visual Studio 2008 中开发了一个 ASP.NET 网站。现在我想在其他机器上部署它。我怎样才能做到这一点??就像我们为 Windows 应用程序制作安装包一样,我们可以为 AS
将 QT 框架添加到我的 .app 包中 我正在关注 Qt 站点上关于部署的文档。 我创建了一个名为 HTTPClient.app 的应用程序 我在 Contents 下创建了 Framework 文
这个问题不太可能对任何 future 的访客有帮助;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于互联网的全局受众。如需帮助使这个问题更广泛适用,visit the h
我正在研究改变我目前创建营销网站的策略。目前,我完全用 PHP 从头开始构建网站,使用一个简单的包含系统。所有代码(以及内容)都存储在文件(而不是数据库)中,允许我使用 Subversion 进行
我有一个长期运行的服务(在 while 1 循环中)并通过 GCloud pub/sub 处理有效负载,之后它将结果写入数据库。 该服务不需要监听任何端口。 Kind=Deployment 的声明性
似乎部署已停滞不前。我该如何进一步诊断? kubectl rollout status deployment/wordpress Waiting for rollout to finish: 2 ou
我正在Dart中使用前端的Angular和后端的Shelf构建一个客户端/服务器应用程序。当我执行pub build时,它会按预期生成Dart文件的javascript,但不会替换HTML文件中的Da
我在 Azure 部署中心的下拉列表中看不到我的所有 Github 组织存储库。 Azure 很久以前就已经被授权了,下拉列表正确地显示了所有的存储库,直到上周我在 DevOps 中玩游戏时,不得不再
我认为标题几乎说明了一切...对于 Deployd 来说是全新的,所以任何关于如何最好地实现这一点的指示都值得赞赏。 最佳答案 要获取用户创建的集合中的对象(我假设您使用的是 javascript 库
我有一个试图用于CD服务器的部署脚本,但是在编写bash脚本以完成一些所需的步骤(例如运行npm和迁移命令)时遇到了问题。 我将如何从该脚本进入容器bash,运行下面的命令,然后退出以完成对更改的提取
我想在使用 kubectl 时将参数传递给 Kubernetes 部署命令应用部署文件。 示例:在我的部署 .yaml 中,我有如下参数,我想在使用 kubectl apply - f .yaml 运
我是一名优秀的程序员,十分优秀!