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

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

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

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

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

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

Solutions Collecting From Web of "Не удалось загрузить собственную библиотеку libnative-platform.so для Linux amd64"

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

1 Возможно, путь, определенный в GRADLE_USER_HOME, не доступен для записи пользователем www-data . Чтобы изменить домашний gradle -g /path/writable/by-www-user вы можете выполнить 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, и проекта, который вы создаете.

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