【问题标题】:Nix Gradle dist - Failed to load native library 'libnative-platform.so' for Linux amd64Nix Gradle dist - 无法为 Linux amd64 加载本机库“libnative-platform.so”
【发布时间】:2018-07-17 02:24:29
【问题描述】:

我正在尝试构建基于 Freemind 的 Freeplane 派生,请参阅:https://github.com/razvan-panda/nixpkgs/blob/freeplane/pkgs/applications/misc/freeplane/default.nix

{ stdenv, fetchurl, jdk, jre, gradle }:

stdenv.mkDerivation rec {
  name = "freeplane-${version}";
  version = "1.6.13";

  src = fetchurl {
    url = "mirror://sourceforge/project/freeplane/freeplane%20stable/freeplane_src-${version}.tar.gz";
    sha256 = "0aabn6lqh2fdgdnfjg3j1rjq0bn4d1947l6ar2fycpj3jy9g3ccp";
  };

  buildInputs = [ jdk gradle ];

  buildPhase = "gradle dist";

  installPhase = ''
    mkdir -p $out/{bin,nix-support}
    cp -r ../bin/dist $out/nix-support
    sed -i 's/which/type -p/' $out/nix-support/dist/freeplane.sh

    cat >$out/bin/freeplane <<EOF
    #! /bin/sh
    JAVA_HOME=${jre} $out/nix-support/dist/freeplane.sh
    EOF
    chmod +x $out/{bin/freeplane,nix-support/dist/freeplane.sh}
  '';

  meta = with stdenv.lib; {
    description = "Mind-mapping software";
    homepage = https://www.freeplane.org/wiki/index.php/Home;
    license = licenses.gpl2Plus;
    platforms = platforms.linux;
  };
}

在 gradle 构建步骤中,它会抛出以下错误:

建筑路径 '/nix/store/9dc1x2aya5p8xj4lq9jl0xjnf08n7g6l-freeplane-1.6.13' 解包源 解包源存档 /nix/store/c0j5hgpfs0agh3xdnpx4qjy82aqkiidv-freeplane_src-1.6.13.tar.gz 源根是 freeplane-1.6.13 将 SOURCE_DATE_EPOCH 设置为时间戳 1517769626 文件 freeplane-1.6.13/gitinfo.txt 补丁源 没有配置配置脚本,什么都不做构建

FAILURE:构建失败并出现异常。

  • 出了什么问题:无法为 Linux amd64 加载本机库“libnative-platform.so”。

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。 “/nix/store/id4vfk3r6fd4zpyb15dq9xfghf342qaa-freeplane-1.6.13.drv”的构建器 失败,退出代码 1 错误:构建 '/nix/store/id4vfk3r6fd4zpyb15dq9xfghf342qaa-freeplane-1.6.13.drv' 失败

从终端运行gradle dist 工作正常。我猜测可能是全局安装的 Nix 软件包之一提供了该问题的修复,并且它们在构建过程中不可见。

我搜索了很多,但找不到任何可行的解决方案。例如,删除 ~/.gradle 文件夹没有帮助。

更新

要重现 git clone https://github.com/razvan-panda/nixpkgs 的问题,请检查 freeplane 分支并在存储库的根目录中运行 nix-build -A freeplane

Link to GitHub issue

【问题讨论】:

  • 这似乎是 gradle 如何打包和/或修补的问题。最小示例:NIX_PATH=nixpkgs=$HOME/nixpkgs nix-build --expr 'with import &lt;nixpkgs&gt; {}; stdenv.mkDerivation { src = ./empty-directory; name = "foo"; buildInputs = [gradle]; buildPhase = "gradle --stacktrace"; } '
  • @RobertHensing 我不明白为什么gradle dist 在从终端运行时工作得很好。我应该在 Nixpkgs 存储库上创建一个关于此的问题吗?
  • 它甚至可以在不如 nix-build 沙箱干净的“纯”nix-shell (s/nix-build/nix-shell --pure) 中工作。例如$HOMEnix-shell --pure 中可用,但在这种情况下这似乎不是问题,所以我不知道缺少什么。这应该可行,因此报告问题是适当的。

标签: c++ c gradle nix nixos


【解决方案1】:

要修复此错误:What went wrong: Failed to load native library 'libnative-platform.so' for Linux amd64. 请执行以下操作:

  1. 检查您的 Gradle 缓存(**~user/.gradle/**native 文件夹是否存在)。
  2. 检查您的 Gradle 缓存(~user/.gradle/native 文件夹是否存在,并且该目录中是否存在相关文件,即libnative-platform.so)。
  3. 检查上述文件夹~user/.gradle~/.gradle/native或文件: ~/.gradle/native/libnative-platform.so 具有有效权限(应该阅读-只有。运行chmod -R 755 ~/.gradle 就足够了。

如果您根本看不到本机文件夹,或者您的本机文件夹似乎已损坏,请运行您的 Gradle 任务,例如:gradle clean build 使用 -g--gradle-user-home 选项并传递它的值。

例如:如果我运行 mkdir /tmp/newG_H_Folder; gradle clean build -g /tmp/newG_H_Folder,你会看到 Gradle 将填充所有必需的文件夹/文件(甚至在运行任何任务或任何选项之前它都需要运行)现在在这个新的 Gradle Home 文件夹(即 /tmp/newG_H_Folder/.gradle 目录)。

从这个文件夹,您可以复制 - just native 文件夹到您用户的 ~/.gradle 文件夹(备份现有的本地如果您愿意,请先在 ~/.gradle 中的文件夹)如果它已经存在 - 或将整个 .gradle 文件夹复制到您的 ~ (主目录)。

然后重新运行你的 Gradle 任务,它就不会再出错了。

Gradle 文档说: https://docs.gradle.org/current/userguide/command_line_interface.html -g, --gradle-user-home 指定 Gradle 用户主目录。默认是用户主目录中的 .gradle 目录。

【讨论】:

    【解决方案2】:

    也许您只是没有文件夹/文件的权限

    sudo chmod 777 yourFolderPath

    你也可以:sudo chmod 777 yourFolderPath/*(所有文件夹)

    文件夹不会被锁定,可以正常使用

    [至少我成功了。。。]

    前:

    sudo chmod 777 Ruby/

    现在,没关系

    【讨论】:

    • 感谢您为 Stack Overflow 提供答案。请将示例作为文本包含在堆栈溢出站点中,而不是链接图像。
    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 2013-01-24
    • 2013-04-23
    • 2021-12-11
    • 1970-01-01
    相关资源
    最近更新 更多