web-dev-qa-db-ja.com

Linux AMD64用のネイティブライブラリ「libnative-platform.so」のロードに失敗しました

まず、これがAsk Ubuntuに属している場合、私の謝罪...これがどのフォーラムに該当するのか本当にわかりません。

Androidとシェルスクリプトを使用して、GithubからPHPプロジェクトをforkしてビルドしようとしています。基本的に、私はWebサイトに書き込んだシェルスクリプトからの出力を出力しています。ページにアクセスしていくつかのボタンを押すと、プロジェクトが分岐され、Gradleを使用してビルドされます。 PHPコードはシェルスクリプトを実行し、コマンドの実行時に出力をブラウザーに出力します。

ただし、スクリプトの出力として次のエラーが発生します。

FAILURE: Build failed with an exception.

* What went wrong:
Failed to load native library 'libnative-platform.so' for Linux AMD64.

スクリプトは今のところgradle buildを実行しているだけですが、後で変更するつもりです...今はルートプロジェクトのビルドと結果の出力に取り組んでいます。

--stacktraceフラグを指定してコマンドを実行した場合の出力は次のとおりです。

* Exception is:
net.rubygrapefruit.platform.NativeException: Failed to load native library 'libnative-platform.so' for Linux AMD64.
    at net.rubygrapefruit.platform.internal.NativeLibraryLoader.load(NativeLibraryLoader.Java:49)
    at net.rubygrapefruit.platform.Native.init(Native.Java:55)
    at org.gradle.internal.nativeintegration.services.NativeServices.initialize(NativeServices.Java:74)
    at org.gradle.internal.nativeintegration.services.NativeServices.initialize(NativeServices.Java:60)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.Java:203)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.Java:169)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.Java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.Java:22)
    at org.gradle.launcher.Main.doAction(Main.Java:33)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.Java:45)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:622)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.Java:54)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.Java:35)
    at org.gradle.launcher.GradleMain.main(GradleMain.Java:23)
Caused by: Java.io.IOException: No such file or directory
    at Java.io.UnixFileSystem.createFileExclusively(Native Method)
    at Java.io.File.createNewFile(File.Java:959)
    at net.rubygrapefruit.platform.internal.NativeLibraryLocator.find(NativeLibraryLocator.Java:39)
    at net.rubygrapefruit.platform.internal.NativeLibraryLoader.load(NativeLibraryLoader.Java:41)
    ... 16 more

そして、これが--debugフラグ付きの出力です。

06:21:43.710 [ERROR] [org.gradle.BuildExceptionReporter] 
06:21:43.740 [ERROR] [org.gradle.BuildExceptionReporter] FAILURE: Build failed with an exception.
06:21:43.747 [ERROR] [org.gradle.BuildExceptionReporter] 
06:21:43.747 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong:
06:21:43.748 [ERROR] [org.gradle.BuildExceptionReporter] Failed to load native library 'libnative-platform.so' for Linux AMD64.
06:21:43.749 [ERROR] [org.gradle.BuildExceptionReporter] 
06:21:43.750 [ERROR] [org.gradle.BuildExceptionReporter] * Exception is:
06:21:43.752 [ERROR] [org.gradle.BuildExceptionReporter] net.rubygrapefruit.platform.NativeException: Failed to load native library 'libnative-platform.so' for Linux AMD64.
06:21:43.753 [ERROR] [org.gradle.BuildExceptionReporter]    at net.rubygrapefruit.platform.internal.NativeLibraryLoader.load(NativeLibraryLoader.Java:49)
06:21:43.753 [ERROR] [org.gradle.BuildExceptionReporter]    at net.rubygrapefruit.platform.Native.init(Native.Java:55)
06:21:43.754 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.internal.nativeintegration.services.NativeServices.initialize(NativeServices.Java:74)
06:21:43.754 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.internal.nativeintegration.services.NativeServices.initialize(NativeServices.Java:60)
06:21:43.755 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.Java:203)
06:21:43.756 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.Java:169)
06:21:43.756 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.Java:33)
06:21:43.756 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.Java:22)
06:21:43.757 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.Main.doAction(Main.Java:33)
06:21:43.758 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.Java:45)
06:21:43.759 [ERROR] [org.gradle.BuildExceptionReporter]    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
06:21:43.759 [ERROR] [org.gradle.BuildExceptionReporter]    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
06:21:43.760 [ERROR] [org.gradle.BuildExceptionReporter]    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
06:21:43.760 [ERROR] [org.gradle.BuildExceptionReporter]    at Java.lang.reflect.Method.invoke(Method.Java:622)
06:21:43.761 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.Java:54)
06:21:43.761 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.Java:35)
06:21:43.762 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.GradleMain.main(GradleMain.Java:23)
06:21:43.762 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: Java.io.IOException: No such file or directory
06:21:43.763 [ERROR] [org.gradle.BuildExceptionReporter]    at Java.io.UnixFileSystem.createFileExclusively(Native Method)
06:21:43.763 [ERROR] [org.gradle.BuildExceptionReporter]    at Java.io.File.createNewFile(File.Java:959)
06:21:43.764 [ERROR] [org.gradle.BuildExceptionReporter]    at net.rubygrapefruit.platform.internal.NativeLibraryLocator.find(NativeLibraryLocator.Java:39)
06:21:43.764 [ERROR] [org.gradle.BuildExceptionReporter]    at net.rubygrapefruit.platform.internal.NativeLibraryLoader.load(NativeLibraryLoader.Java:41)
06:21:43.765 [ERROR] [org.gradle.BuildExceptionReporter]    ... 16 more
06:21:43.765 [ERROR] [org.gradle.BuildExceptionReporter]

私はこの問題についていくつかの調査を行ったところ、 このフォーラムの投稿 が見つかりましたが、問題の修正方法については何もわかりませんでした。

さらなる調査の結果、NixOSのように見える Githubの問題 が見つかりましたが、私はUbuntu 12.04 CLIを実行しています。また、私はGradle 2.10も実行していることにも言及する必要があります。

gradle -Dorg.gradle.native=false buildも実行してみましたが、結果は同じでした。

さて、ユーザーがスクリプトを呼び出している限り、Apache2 WebサーバーとPHPを実行しているので、それはwww-dataだと思います。

これは、スクリプトを実行するPHPコードの小さなスニペットです。これは、別の SO post で見つけました。

<?php
    $command = "sh /home/andrew/scripts/build.sh 2>&1";
    while (@ ob_end_flush()); // end all output buffers if any
    $proc = popen($command, 'r');
    echo '<pre style="border-radius: 5px; padding:4px; color:black; background:#ffffff" align="left">';
    while (!feof($proc)){
        echo fread($proc, 1024);
        @ flush();
    }
    echo '</pre>';
?>

私は今途方に暮れているので、誰かが私を新しい信頼できる答えに導いてくれることを願っています。

14
Andrew Quebe

ターミナルのユーザーアカウントで実行されたときにフォークとビルドのスクリプトが正常に機能している場合は、環境変数とファイルの権限に問題がある可能性があります。

1 GRADLE_USER_HOMEで定義されたパスがwww-dataユーザーによって書き込み可能でない可能性があります。ホームディレクトリを変更するには、ビルドスクリプトを実行する直前に_gradle -g /path/writable/by-www-user_を実行するか、PHP putenv()を使用して 'GRADLE_USER_HOME'を修正します。

GRADLE_USER_HOMEを変更する場合は、ビルドに重要な可能性があるgradle.propertiesなどのファイルも移動します。

2 www-dataがgradleコマンドを実行できるかどうかを確認します

_Sudo -u www-data `gradle --version`
_

www-userおよびユーザーの環境変数を確認する方法:

ターミナルprintenvで環境変数を出力するために使用できます。たとえば、_Sudo -u www-data printenv_であるwww-dataユーザーの場合、ユーザーの場合はprintenv

それらをファイルに保存して比較できます

_Sudo -u www-data printenv > wwwdata-env
printenv > my-env
diff --side-by-side --suppress-common-lines wwwdata-env my-env
_

次に、PHP method putenv()-を使用して、Gradleおよびビルドするプロジェクトに関連する不足している変数を設定します。

7
Pawel Dubiel

私にとって、@ Pawel Dubielの回答は機能しなかったため、Gradleコマンドに「-g gradle-user-home」を追加すると問題が解決することがわかりました。

gradle build -g gradle-user-home

私はgradle 3.0を使用していますが、実行権限を取得するには、-gパラメータで指定されているディレクトリが必要です。このエラーが発生したときに実行可能ではなく、実行可能にすることで問題は解決しました。

0
user872858

~/.gradleは壊れたシンボリックリンクです。それが役に立てば幸い。

0
wukong