Не удалось загрузить собственную библиотеку libnative-platform.so для Linux amd64
Прежде всего, если это относится к Ask Ubuntu, мои извинения... Я не совсем уверен, на каком форуме это подпадает.
Я пытаюсь развить и построить проект Android от Github с помощью PHP и оболочки script. В принципе, я печатаю какой-то вывод из оболочки script, которую я написал на веб-сайте. Когда вы посещаете страницу и нажимаете несколько кнопок, проект разветвляется и строится с помощью Gradle. Код PHP запускает оболочку script, а затем выводит результат в браузер по мере запуска команды.
Однако, я получаю эту ошибку в качестве вывода моего script:
FAILURE: Build failed with an exception.
* What went wrong:
Failed to load native library 'libnative-platform.so' for Linux amd64.
script просто работает 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
, но результат был тем же.
Теперь, насколько пользователь вызывает script, я считаю, что это www-данные, поскольку я запускаю веб-сервер Apache2 и PHP.
Вот небольшой фрагмент кода PHP, который запускает script, который я нашел на другом 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>';
?>
Сейчас я в недоумении, поэтому я надеюсь, что кто-то может привести меня к новому, надежному ответу.
Ответы
Ответ 1
Если разветвление и построение script работают нормально, когда выполняется под вашей учетной записью пользователя в терминале, то проблема, скорее всего, связана с разрешениями переменных окружения и файлов.
1 Возможно, путь, определенный в GRADLE_USER_HOME, не доступен для записи пользователем www-datastrong > . Чтобы изменить домашний каталог, вы можете выполнить gradle -g /path/writable/by-www-user
непосредственно перед запуском build script или использовать в PHP putenv()
для изменения "GRADLE_USER_HOME".
Если вы измените GRADLE_USER_HOME, тогда также переместите файлы типа gradle.properties, которые могут быть важны для вас.
2 Убедитесь, что команда gradle может быть выполнена с помощью www-datap >
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, и проекта, который вы создаете.
Ответ 2
Я использую gradle 3.0, и ему нужен каталог, указанный в параметре -g, для разрешения на выполнение. Это было не выполнимо, когда мы получили эту ошибку и сделали ее выполнимой, решив проблему.
Ответ 3
Для меня ответ @Pawel Dubiel не сработал,
Поэтому я обнаружил, что добавление "-g gradle-user-home" к команде Gradle решило проблему.
gradle build -g gradle-user-home