【发布时间】:2018-02-27 17:39:15
【问题描述】:
我正在尝试将 FreeType 与我的 Mac 版本的 OpenJDK9 捆绑,但在构建完成后引用 libfreetype 时遇到问题。我正在将 JDK 与我的应用程序打包在一起,并且不希望最终用户必须安装 FreeType 才能使应用程序正常工作(我们使用的 JDK7 版本可以满足我的需求,但我不是构建它的人所以不知道他们做了什么让这个工作)。
下载 FreeType 2.5.3 后(我也使用过 2.8.1,但我认为使用哪个版本并不重要,因为 OpenJDK 说 2.3 以上的版本应该适用于 Java 9),我正在运行(只需填写带有变量的路径,因为它们并不重要)
./configure prefix=$DOWNLOAD_PATH/freetype-2.5.3
make
make install
然后构建我的 JDK,我正在运行
bash ./configure --with-freetype=$DOWNLOAD_PATH/freetype-2.5.3 --with-boot-jdk=$PATH_TO_JDK1.8/Contents/Home --disable-warnings-as-errors
make images
这可以很好地构建 JDK 并将 libfreetype.dylib.6 捆绑到 jdk/lib 目录中,但是当我打开 libfontmanager.dylib 时,我可以看到它指向 $DOWNLOAD_PATH/freetype-2.5.3/lib/libfreetype.6.dylib 而不是 @rpath/libfreetype.6.dylib
因为它没有使用相对路径(即使它成功捆绑了文件),所以当我运行应用程序时,它正在寻找存在的 $DOWNLOAD_PATH 以查找 dylib 文件(它不是因为那个位置是仅在我用来构建 JDK 的 Mac 上),所以我得到一个看起来像这样的错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /Applications/Launcher.app/Contents/PlugIns/jdk-9.jdk/Contents/Home/jre/lib/libfontmanager.dylib:
dlopen(/Applications/Launcher.app/Contents/PlugIns/jdk-9.jdk/Contents/Home/jre/lib/libfontmanager.dylib,
1): Library not loaded: /$DOWNLOAD_PATH/freetype-2.5.3/lib/libfreetype.6.dylib
Referenced from: /Applications/Launcher.app/Contents/PlugIns/jdk-9.jdk/Contents/Home/jre/lib/libfontmanager.dylib
Reason: image not found
at java.base/java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.base/java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.base/java.lang.ClassLoader.loadLibrary(Unknown Source)
...
如何让我的构建在此处使用@rpath,而不是从中提取 FreeType 的绝对路径?它成功捆绑了文件(libfreetype.6.dylib 在 jre/lib 目录下),只是在 libfontmanager.dylib 中没有指向它。
【问题讨论】:
标签: java macos java-9 freetype freetype2