Nix Gradle dist - 无法为Linux amd64加载本机库'libnative-platform.so'

时间:2018-02-06 22:19:20

标签: c++ c gradle nix nixos

我正在尝试基于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   source root是freeplane-1.6.13,将SOURCE_DATE_EPOCH设置为时间戳   1517769626文件freeplane-1.6.13 / gitinfo.txt修补源   配置无配置脚本,无需构建

     

失败:构建因异常而失败。

     
      
  • 出了什么问题:无法为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

1 个答案:

答案 0 :(得分:0)

要纠正此错误: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 clean build-g选项运行--gradle-user-home的Gradle任务并传递其值。

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

从该文件夹中,您可以将 本地 文件夹只是复制到用户的〜/ .gradle文件夹(获取现有本机文件的备份文件夹(如果需要的话,请先放在〜/ .gradle中))-或将整个 .gradle 文件夹复制到您的〜(主目录)中。

然后重新运行Gradle任务,它将不再出错。

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