Как создать статические двоичные файлы (не связанные, переносимые) GNU find для Solaris 8,9,10 и AIX

#compilation #find #solaris #gnu #aix

#Сборник #Найти #солярис #гну #aix

Вопрос:

Мы (моя команда) ищем правильный метод для компиляции команды GNU find в виде статического (не динамически связанного) переносимого двоичного файла (который я могу скопировать из одной системы в другую) для Solaris 8, 9 и 10.

У кого-нибудь есть хороший рецепт для достижения этого?

Нам это нужно по нескольким причинам, но среди них тот факт, что мы не можем просто загрузить его на все серверы, на которые нам нужно его транспортировать, по политическим и техническим причинам. Это сложно, но, короче говоря, я поддерживаю приложение, которое использует удаленные агенты для вызова системных команд (называется BladeLogic Server Automation). Возможно, вы видели мои другие сообщения об этом, но у нас много проблем с Solaris из-за встроенного find, который поставляется вместе с ним, потому что он не оснащен нужными нам опциями (-path ). GNU find есть, но мы не можем установить его везде (это будет слишком долго, и клиенты, владеющие серверами, могут просто отказаться). НИ один из других вариантов, предложенных сообществом, не работал в 100% случаев на каждом сервере.

Хотя мы не можем ничего установить без одобрения клиента (что может занять буквально недели, если не месяцы), мы МОЖЕМ отправить отдельный файл, выполнить его и впоследствии удалить, если потребуется. Поэтому, если бы мы могли просто найти двоичный файл для каждой имеющейся у нас платформы Solaris и AIX, у нас было бы простое решение.

Ответ №1:

Что касается Solaris, просто скомпилируйте в Solaris 8, и двоичные файлы будут работать для 8, 9 и 10. Вы не должны связываться со статической библиотекой C, это противоречит переносимости, а не наоборот. Статический libc даже не является частью Solaris 10.

Комментарии:

1. Хорошо, я немного новичок в компиляции на самом деле, и я думаю, что у меня неправильное представление о том, что означает статическое связывание… Возможно, я неправильно это называю, но я бы хотел создать автономный двоичный файл, который включает в себя необходимые библиотеки ann (чтобы вы не зависели от его присутствия в системе). Как же тогда это называется?

2. Какую требуемую библиотеку вы имеете в виду?

3. Это libintl.so.8 (см. Зависимости здесь: opencsw.org/packages/findutils ) … который, в свою очередь, зависит от двух других библиотек GNU: ggettext_data и libiconv, которые вряд ли будут в системе barebone Solaris, если вы их тоже не установите.

4. Вы можете статически связываться только со статическими библиотеками (libfoo.a), а не с динамическими библиотеками (libfoo.so.1). Для системных библиотек, таких как libc, статическое связывание СНИЖАЕТ переносимость и значительно увеличивает вероятность того, что ваша программа не будет работать в других версиях Solaris.

5. Так что, если я правильно понимаю, мне крышка. Просто нет способа просто скопировать автономный двоичный файл «find» из одной системы в другую без необходимости сначала устанавливать зависимости с помощью pkgadd?

Ответ №2:

Мне кажется, что пакет findutils не имеет зависимостей, отличных от libc, поэтому я не знаю, что вы хотите статически связать с ним? Я ожидаю, что если вы создадите find на одной машине Solaris, он должен работать на всех. Есть ли какие-либо конкретные проблемы, с которыми вы сталкиваетесь?

Комментарии:

1. Ну, в конкретном случае требуемая версия libc отсутствовала в зоне solaris, в которую я пытался скопировать двоичный файл find. Возможно, речь идет о том, чтобы связать его в глобальной зоне, но мы не можем сделать это на каждом клиентском сервере (без одобрения клиента, как я объяснил выше). Лучшим и простым решением для нас было бы иметь возможность просто скопировать двоичный файл find туда, где он нам нужен, без необходимости устанавливать или связывать какие-либо зависимости (даже если это только одна библиотека).

2. libc должен присутствовать в вашей зоне, иначе ни одна программа не будет запущена. Это библиотека, которая реализует стандартные заголовки c, а в Linux, по крайней мере, стандартные заголовки posix. Существует вероятность того, что find полагается на какую-то функцию libc Linux, недоступную в Solaris, поэтому я спросил, пробовали ли вы это, и что пошло не так?