it-swarm.com.ru

Не удалось загрузить собственную библиотеку libnative-platform.so для Linux AMD64

Прежде всего, если это относится к Ask Ubuntu, мои извинения ... Я не совсем уверен, к какому форуму это относится.

Я пытаюсь создать и построить проект Android из Github, используя PHP и ​​скрипт Shell. По сути, я распечатываю вывод сценария Shell, который я написал на веб-сайте. Когда вы посещаете страницу и нажимаете некоторые кнопки, проект разветвляется и создается с использованием 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]

Я провел некоторое исследование по этому вопросу и обнаружил это сообщение на форуме , но он не дал мне никаких подсказок относительно того, как решить проблему.

Дальнейшие исследования привели меня к проблема Github , которая, похоже, предназначена для NixOS, но я использую Ubuntu 12.04 CLI. Кроме того, я должен отметить, что я использую Gradle 2.10.

Я также попытался запустить gradle -Dorg.gradle.native=false build, но результат был тот же.

Теперь, что касается того, что пользователь называет сценарием, я считаю, что это www-data, так как я использую веб-сервер Apache2 и PHP.

Вот небольшой фрагмент кода PHP, который запускает скрипт, который я нашел в другом ТАК сообщение :

<?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>';
?>

Сейчас я в растерянности, поэтому я надеюсь, что кто-то может привести меня к новому, надежному ответу.

13
Andrew Quebe

Если разветвление и сборка сценария работают нормально, когда он выполняется под вашей учетной записью пользователя в терминале, то проблема, скорее всего, связана с переменными среды и правами доступа к файлам. 

1 Возможно, что путь, определенный в GRADLE_USER_HOME, не доступен для записи пользователю www-data . Чтобы изменить home dir, вы можете выполнить gradle -g /path/writable/by-www-user непосредственно перед запуском сценария сборки или использовать в PHP putenv() для изменения GRADLE_USER_HOME.

Если вы измените GRADLE_USER_HOME, то также переместите файлы, такие как gradle.properties, которые могут быть важны для вашей сборки. 

2 Проверьте, может ли команда gradle выполняться с помощью www-data 

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

Как проверить переменные окружения для www-пользователя и для вашего пользователя:  

вы можете использовать в терминале printenv для печати переменных среды. Например, для пользователя www-data это будет Sudo -u www-data printenv, а для вашего пользователя просто printenv

вы можете сохранить их в файлы и сравнить

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

Затем используйте метод PHP putenv() - для установки любых отсутствующих переменных, связанных с Gradle и проектом, который вы строите. 

5
Pawel Dubiel

Я использую gradle 3.0, и для его выполнения требуется каталог, указанный в параметре -g. Он не был исполняемым, когда мы получили эту ошибку, и его выполнение решило проблему.

0
user872858