Скомпилированная Ubuntu программа для запуска на веб-сервере Unix - PullRequest
1 голос
/ 18 марта 2012

Я скомпилировал программу Ada в Ubuntu, используя GNAT.

После этого я попробовал несколько тестовых прогонов с этой программой, и она работала правильно.

Но когда я загрузил это на свой веб-сервер Apache (UNIX) и попытался запустить программу, ничего не вышло. Почему это так?

Может ли быть так, что программы, скомпилированные в Ubuntu, не работают на сервере UNIX?

(простите за глупый вопрос!)

Linux-версия системы, которую я использую для компиляции (uname -a):

Linux ubuntu 3.0.0-12-generic #20-Ubuntu x86-64 GNU/Linux

Linux-версия системы, на которой я хочу запустить программу позже (uname -a):

Linux 2.6.37-he-xeon-64gb+1 i686 GNU/Linux

Для компиляции на машине с Ubuntu я использую:

gnatmake -O3 myprogram -bargs -static

Ответы [ 3 ]

7 голосов
/ 18 марта 2012

Когда вы создаете программу GNAT (gnatmake my_program), по умолчанию она связывается с динамическими библиотеками (libgnat.so, libgnarl.so).Эти библиотеки являются частью системы GNAT и вряд ли будут доступны на вашем веб-сервере.

Если вы скажете ldd my_program, он покажет вам используемые общие библиотеки.

Вы можете принудительно вызватьсборка для использования статических библиотек GNAT:

gnatmake my_program -bargs -static

(-bargs -static должен идти после обычных флагов, таких как -O2).

Редактировать: подробнее о -bargs и друзья .

1 голос

Вы должны убедиться, что на сервере есть библиотеки, на которые ссылается ваше приложение, или статически связывать их, как уже предлагали другие.В некоторых других комментариях указывается, что вам нужно «кросс-компилировать» или что сервер не будет работать с 64-битными двоичными файлами.Это легко решить, если приложение, которое вы создаете, не очень сложное.

gnatmake --GCC = 'gcc -m32'

Создает двоичный файл, который будет работать в 32-битной системе.Тем не менее, главная проблема в том, что серверы (g) libc, скорее всего, будут старше, чем то, что есть на вашем компьютере с ubunu.Программы, скомпилированные с более новым glibc, не обязательно будут работать в системах с установленным более старым glibc.

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

Связывание со старой версией libc для обеспечения большего охвата приложения
Как я могуссылка на конкретную версию glibc?

edit: Кроме того, apache может не быть настроен на прием внешних двоичных файлов.Вы пытались запустить программу с тем, что, как вы знаете, существует на сервере?Попробуйте запустить что-нибудь тривиальное, например / bin / ls, чтобы убедиться, что ваш метод запуска программы работает.Посмотрите логи, если они не работают.Программы должны быть исполняемыми, кстати: chmod 755 / path / to / webeserver / uploads / ada-app

0 голосов
/ 27 марта 2012

Почему бы вам просто не скомпилировать его на своем веб-сервере вместо локального компьютера?

Aswell cat /etc/issue или cat /etc/release может дать нам некоторую информацию о дистрибутиве, который вы используете.

...