我使用 install4j 8.0.8 创建的 MacOS 文件夹 DMG 媒体文件存在问题。如果我对包进行代码签名,则所有内容都会正确签名,包括驻留在 lib/ 目录中的 *.dyld 文件。此外,我的 GUI 程序工作正常,对 System.loadLibrary() 的调用成功并正确加载了 dyld 文件。但是,调用与我的 GUI 程序相同的 Java 代码的命令行程序在调用 System.loadLibrary() 并显示以下消息时会失败:
java.lang.UnsatisfiedLinkError: jhdf5 (Not found in java.library.path)
at java.base/java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:1745)
at java.base/java.lang.ClassLoader.loadLibraryWithClassLoader(ClassLoader.java:1697)
at java.base/java.lang.System.loadLibrary(System.java:591)
但是,如果我在为 MacOS 构建媒体文件时禁用代码签名(我通过从 Ant 传递 disableSigning=true 来实现),那么 GUI 和命令行程序都可以正常工作。
所以可能,我不明白在从控制台启动器与在 MacOS 上的 GUI 启动器(我正在运行 Big Sur)运行程序时,我是否需要对 Java VM 参数做一些额外的事情。或者只是无法在按需加载 dyld 文件的代码签名媒体文件中运行控制台启动器?可能是因为控制台启动器是作为 MacOS 上的脚本实现的。install4j 8 文档似乎没有提到我能找到的这种细微差别。
已安装文件的目录结构如下所示:
Peters-MacBook-Pro-16:CoastWatch Utilities Signed phollema$ ll
total 4224
drwxr-xr-x 10 phollema admin 320 9 Apr 17:25 .
drwxrwxr-x 37 root admin 1184 9 Apr 17:24 ..
drwxr-xr-x 53 phollema admin 1696 9 Apr 17:25 .install4j
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 CoastWatch Utilities Uninstaller.app
drwxr-xr-x 25 phollema admin 800 9 Apr 18:50 bin
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 data
drwxr-xr-x 8 phollema admin 256 9 Apr 17:25 doc
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 extensions
drwxr-xr-x 4 phollema admin 128 9 Apr 17:25 lib
-rw-r--r-- 1 phollema admin 1608406 9 Apr 17:12 src.zip
Peters-MacBook-Pro-16:CoastWatch Utilities Signed phollema$ ll bin
total 624
drwxr-xr-x 25 phollema admin 800 9 Apr 18:50 .
drwxr-xr-x 10 phollema admin 320 9 Apr 17:25 ..
-rw-r--r--@ 1 phollema admin 6148 9 Apr 18:50 .DS_Store
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 CoastWatch Data Analysis Tool.app
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 CoastWatch Master Tool.app
drwxr-xr-x 3 phollema admin 96 9 Apr 17:24 CoastWatch Status Tool.app
-rwxr-xr-x 1 phollema admin 14801 9 Apr 17:12 cwangles
-rwxr-xr-x 1 phollema admin 14803 9 Apr 17:12 cwautonav
-rwxr-xr-x 1 phollema admin 14829 9 Apr 17:12 cwcomposite
-rwxr-xr-x 1 phollema admin 14827 9 Apr 17:12 cwcoverage
-rwxr-xr-x 1 phollema admin 14805 9 Apr 17:12 cwdownload
-rwxr-xr-x 1 phollema admin 14801 9 Apr 17:12 cwexport
-rwxr-xr-x 1 phollema admin 14827 9 Apr 17:12 cwgraphics
-rwxr-xr-x 1 phollema admin 14789 9 Apr 17:12 cwgscript
-rwxr-xr-x 1 phollema admin 14823 9 Apr 17:12 cwimport
-rwxr-xr-x 1 phollema admin 14797 9 Apr 17:12 cwinfo
-rwxr-xr-x 1 phollema admin 14819 9 Apr 17:12 cwmath
-rwxr-xr-x 1 phollema admin 14805 9 Apr 17:12 cwnavigate
-rwxr-xr-x 1 phollema admin 14829 9 Apr 17:12 cwregister
-rwxr-xr-x 1 phollema admin 14831 9 Apr 17:12 cwregister2
-rwxr-xr-x 1 phollema admin 14823 9 Apr 17:12 cwrender
-rwxr-xr-x 1 phollema admin 14801 9 Apr 17:12 cwsample
-rwxr-xr-x 1 phollema admin 14841 9 Apr 17:12 cwscript
-rwxr-xr-x 1 phollema admin 14799 9 Apr 17:12 cwstats
-rwxr-xr-x 1 phollema admin 14763 9 Apr 17:12 hdatt
Peters-MacBook-Pro-16:CoastWatch Utilities Signed phollema$ ll lib/native/macosx_x86_64/
total 12544
drwxr-xr-x 4 phollema admin 128 9 Apr 17:25 .
drwxr-xr-x 3 phollema admin 96 9 Apr 17:25 ..
-rw-r--r-- 1 phollema admin 1748128 9 Apr 17:12 libjhdf.dylib
-rw-r--r-- 1 phollema admin 3536000 9 Apr 17:12 libjhdf5.dylib
此外,控制台启动器脚本包含添加DYLD_LIBRARY_PATH
如下内容的行:
DYLD_LIBRARY_PATH="$app_home/lib/native/macosx_x86_64:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH
如果我不签署媒体文件,所有这些都有效,并且控制台启动器脚本是相同的。