【问题标题】:Bundle OpenJDK9 with FreeType @ref in libfontmanager.dylib在 libfontmanager.dylib 中将 OpenJDK9 与 FreeType @ref 捆绑在一起
【发布时间】: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


    【解决方案1】:

    对于任何相关的人来说,这个问题的 JDK 错误已于 12 月关闭,该错误确认了该错误并提供了解决方法,方法是使用 install_name_tool 手动修改 dylib 文件以在 jdk 被使用后使用 @rpath已创建。

    这是该错误的链接:https://bugs.openjdk.java.net/browse/JDK-8139653?jql=text%20~%20%22freetype%22

    【讨论】:

      【解决方案2】:

      我发现这个解决方案是最容易遵循的:https://github.com/AdoptOpenJDK/openjdk-build/issues/489#issuecomment-446181769

      cd <JDK path>/Contents/Home/jre/lib 
      sudo ln -s libfreetype.dylib.6 libfreetype.6.dylib
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-26
        • 2023-03-27
        • 2019-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-27
        相关资源
        最近更新 更多