Попробуйте следующее:
echo exec('ping -n 1 -w 1 72.10.169.28');
Я не знаю, что такое Yesod, но я знаю точно , что означает каждая из ваших других ошибок.
Сначала вы должны not попробовать для связывания статически. Предупреждение, которое вы получаете, совершенно правильно: если вы ставите статическую ссылку и используете одну из подпрограмм, для которой вы получаете предупреждение, тогда вы должны организовать запуск в системе с точно той же самой версии libc .so.6 как тот, который вы использовали во время сборки.
Вопреки распространенному мнению, статическая привязка производит less , не более, переносные исполняемые файлы в Linux.
Ваши другие (статические) ошибки ссылок вызваны отсутствием libopenssl.a
во время соединения.
Но давайте предположим, что вы собираетесь идти по «нормальному» маршруту и используйте динамическую привязку.
Для динамической компоновки Linux (и большинство других UNIX) поддерживает обратную совместимость: старый двоичный файл продолжает работать на более новых системах. Но они не поддерживают форвардную совместимость (двоичный код, построенный на более новой системе, обычно будет , а не работать на более старом языке.)
Но это то, что вы пытаетесь сделать: вы построенный на системе с glibc-2.14 (или новее), и вы работаете в системе с glibc-2.13 (или старше).
Другое, что вам нужно знать, это то, что glibc состоит из некоторых 200+, которые должны соответствовать точно . Двумя ключевыми двоичными файлами являются /lib/ld-linux.so
и /lib/libc.so.6
(но их еще много: libpthread.so.0
, libnsl.so.1
и т. Д. И т. Д.). Если некоторые из этих двоичных файлов поступают из разных версий glibc, вы обычно получаете сбой. И это именно то, что вы получили, когда вы попытались поместить свой glibc-2.14 libc.so.6
на LD_LIBRARY_PATH
- он больше не соответствует системе /lib/ld-linux
.
Итак, каковы решения? Существует несколько возможностей (с большим трудом):
ld-2.14.so
(цель символа /lib/ld-linux
) в целевую систему и явно вызвать его: /path/to/ld-2.14.so --library-path <whatever> /path/to/your/executable
Это вообще работает, но может запутать приложение, которое смотрит на argv[0]
, и ломается для приложений, которые повторно запускают себя. appgcc
(этот параметр исчез, см. этот для описания того, чем он был раньше). У меня возникли аналогичные проблемы с запуском Heroku (который использует glibc-2.11), где у меня было приложение, которое требовало glibc-2.14, но у меня не было доступа к источнику и он не мог его перестроить. Я пробовал много вещей и ничего не работал.
Мое обходное решение состояло в том, чтобы запустить службу на Amazon Elastic Beanstalk и просто предоставить интерфейс API.
У вас есть несколько проблем.
Вы не должны создавать производственные двоичные файлы на граничных распределениях кровотечений. Библиотеки на производственной системе не будут переадресованы.
Нельзя связывать glibc статически - он всегда будет во время выполнения попытаться загрузить дополнительные библиотеки. Например, сборка на основе процессора. Вот некоторые из ваших первых предупреждений.
Последние ошибки компоновщика выглядят так, как будто они связаны с отсутствующей библиотекой openssl в командной строке.
Но в целом - уменьшите распределение .
ld-2.14.so
в мою сборку heroku вместе сlibc.so.6
иlibgmp.so.10
из моей системы и сменил команду запуска heroku на указанную вами. Приложение теперь терпит крах (по крайней мере, нет выхода из аварии в журналах heroku, состояние просто меняется от начала до разбитого). Если я запустилheroku run ./lib/ld-linux-x86-64.so.2 --list /path/to/executable
, все библиотечные зависимости заполнены, , но i> большинство из них удовлетворяются системными библиотеками. Нужно ли мне копировать библиотеки all i> с помощью приложения из моей системы? – asm 28 December 2011 в 19:46-static
и друзей, GHC свяжет GHC RTS с вашим исполняемым файлом (который вам нужен, поскольку Heroku, вероятно, не имеет среды исполнения GHC, доступной как lib), если вы явно не компилируете с помощью-dynamic
. По умолчанию библиотеки , используемые RTS i>, нравятся динамически, что было бы разумно для вашего дела. См. Также: stackoverflow.com/questions/699908/… – Dan Burton 28 December 2011 в 23:30libc
новее, чем то, что на хостах Heroku, как предлагалEmployed Russian
. – asm 29 December 2011 в 00:23