web-dev-qa-db-fra.com

Impossible de charger la bibliothèque native 'libnative-platform.so' pour Linux AMD64

Tout d’abord, si cela s’applique sur Ask Ubuntu, toutes mes excuses, je ne sais pas trop à quel forum appartient.

J'essaie de créer et de créer un projet Android à partir de Github en utilisant PHP et un script Shell. Fondamentalement, j'imprime une sortie d'un script Shell que j'ai écrit sur un site Web. Lorsque vous visitez la page et appuyez sur certains boutons, le projet est créé et créé à l'aide de Gradle. Le code PHP exécute le script Shell, puis imprime la sortie dans le navigateur lors de l'exécution de la commande.

Cependant, je reçois cette erreur comme sortie de mon script:

FAILURE: Build failed with an exception.

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

Le script exécute simplement gradle build pour l'instant mais j'ai l'intention de le modifier plus tard ... pour l'instant, je travaille uniquement sur la construction du projet racine et la sortie du résultat.

Voici le résultat si j'exécute la commande avec l'indicateur --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

Et voici la sortie avec le drapeau --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]

J'ai fait des recherches sur cette question et trouvé cet article du forum , mais cela ne m'a pas donné d'indications sur la façon de résoudre le problème.

Des recherches ultérieures m'ont conduit à un problème de Github , qui semble concerner NixOS, mais je suis sous Ubuntu 12.04 CLI. En outre, je devrais mentionner que je cours également Gradle 2.10.

J'ai aussi essayé d'exécuter gradle -Dorg.gradle.native=false build également, mais le résultat était le même.

Maintenant, en ce qui concerne l'utilisateur qui appelle le script, je pense qu'il s'agit de www-data, car j'utilise un serveur Web Apache2 et PHP. 

Voici un petit extrait du code PHP qui exécute le script, que j'ai trouvé sur un autre 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>';
?>

Je suis perdu maintenant, alors j'espère que quelqu'un pourra me conduire à une nouvelle réponse fiable.

13
Andrew Quebe

Si le forking et la construction du script fonctionnent correctement quand est exécuté sous votre compte utilisateur dans le terminal, un problème est probablement lié aux autorisations de variables d'environnement et de fichiers. 

1 Il se peut que le chemin défini dans GRADLE_USER_HOME ne soit pas accessible en écriture pour l'utilisateur www-data . Pour changer le répertoire personnel, vous pouvez exécuter gradle -g /path/writable/by-www-user juste avant d'exécuter le script de compilation ou l'utiliser dans PHP putenv() pour modifier 'GRADLE_USER_HOME'.

Si vous modifiez GRADLE_USER_HOME, déplacez également des fichiers tels que gradle.properties, qui peuvent être importants pour la construction. 

2 Vérifiez si la commande de gradation peut être exécutée par www-data 

Sudo -u www-data `gradle --version`

Comment vérifier les variables d'environnement pour www-user et pour votre utilisateur:  

vous pouvez utiliser dans terminal printenv pour imprimer des variables d’environnement. Par exemple, pour l'utilisateur www-data, il s'agira de Sudo -u www-data printenv et pour votre utilisateur, simplement printenv

vous pouvez les enregistrer dans des fichiers et comparer

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

Ensuite, utilisez PHP method putenv() - pour définir les variables manquantes liées à Gradle et au projet que vous générez. 

5
Pawel Dubiel

J'utilise gradle 3.0 et il faut que le répertoire mentionné dans le paramètre -g ait l'autorisation d'exécuter. Ce n'était pas exécutable lorsque nous avons eu cette erreur et que le rendre exécutable a résolu le problème.

0
user872858