Я бы по указанным выше причинам не статически связывал что-либо, если только вы не должны .
Это, как говорится, должно работать на любом другом подобном ядре с той же архитектурой (то есть, если вы статически подключаетесь на машине под управлением Linux 2.4.x, загрузчик VDSO будет отличаться на Linux 2.6, VDSO будет виртуальной динамической общий объект, общий объект, который ядро предоставляет каждому процессу, содержащему код загрузчика).
К другим подводным камням относятся вещи, которые в / etc находятся не там, где вы думаете, журналы находятся в разных местах, системные утилиты отсутствуют или отличаются (ubuntu использует update-rc.d, RHEL использует chkconfig) и т. Д.
Иногда у тебя просто нет выбора. Я писал программу, которая говорила со строковым интерфейсом cmdlib в LVM2 в пользу использования execv () ... low, и вот, 30% дистрибутивов, которые мне нужно было поддерживать, НЕ включали эту библиотеку и не предлагали ее получить. Поэтому при создании бинарных пакетов мне пришлось ссылаться на статический объект.
Если вы используете glibc, вы можете быть уверены, что такие вещи, как getpwnam () и друзья по-прежнему будут работать ... просто следите за любыми жестко заданными путями (еще лучше, сделайте их настраиваемыми во время выполнения)