Я решил компилять опенсорсное ПО с glibc 2.5, но с новыми либами. Так бинарники будут запускаться в бóльшем количестве дистрибутивов Linux. Взял CentOS 5.10 x86 и x86_64, начал эксперимент на Syobon Action (Neko Mario). Скомпилял на 32 битах, создал каталог libдля зависимостей, сделал run.sh и файлы .desktop и значков.
Неожиданно я заметил что libSDL с сайта http://www.libsdl.org/ (а SDL_image, sound, mixer, net и ttf отсюда: http://www.libsdl.org/projects/) имеет гораздо меньшее количество зависимостей, чем дистрибутивный (кроме того, он последней версии):
ldd /usr/lib64/libSDL-1.2.so.0.11.4
linux-vdso.so.1 => (0x00007fff3327c000)
libm.so.6 => /lib64/libm.so.6 (0x00002b8b13126000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002b8b133a9000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b8b135ae000)
libc.so.6 => /lib64/libc.so.6 (0x00002b8b137ca000)
/lib64/ld-linux-x86-64.so.2 (0x00002b8b12c43000)
Красиво, не правда ли? При этом иксы, OSS и ALSA библиотека умеет, но не «прибита гвоздями» к ним. Вероятно что используется dlopen.
Когда я начал собирать 64-битный бинарник выяснилось что крутой libSDL с сайта:
# rpm -ivh SDL-1.2.15-1.x86_64.rpm
error: Failed dependencies:
libc.so.6(GLIBC_2.14)(64bit) is needed by SDL-1.2.15-1.x86_64
Хотя 32-битный установился. Налажали немного. Пересобрал из SRPM-ки и всем доволен. Кроме этого:
checking for OSS audio support... yes
checking for dmedia audio support... no
checking for ALSA CFLAGS...
checking for ALSA LDFLAGS... -lasound -lm -ldl -lpthread
checking for libasound headers version >= 0.9.0... found.
checking for snd_ctl_open in -lasound... yes
-- dynamic libasound -> libasound.so.2
checking for artsc-config... /usr/bin/artsc-config
checking for aRts development environment... yes
-- dynamic libartsc -> libartsc.so.0
checking for esd-config... /usr/bin/esd-config
checking for ESD - version >= 0.2.8... yes
-- dynamic libesd -> libesd.so.0
checking for pkg-config... /usr/bin/pkg-config
checking for PulseAudio 0.9 support... no
checking audio/audiolib.h usability... no
checking audio/audiolib.h presence... no
checking for audio/audiolib.h... no
checking for AuOpenServer in -laudio... no
checking for NAS audio support... no
checking for X... libraries /usr/lib64, headers
checking whether -R must be followed by a space... neither works
checking for gethostbyname... yes
checking for connect... yes
checking for remove... yes
checking for shmat... yes
checking for IceConnectionNumber in -lICE... yes
-- dynamic libX11 -> libX11.so.6
-- dynamic libX11ext -> libXext.so.6
checking for X11/extensions/Xrandr.h... yes
-- dynamic libXrender -> libXrender.so.1
-- dynamic libXrandr -> libXrandr.so.2
checking for framebuffer console support... yes
checking for getpagesize... yes
checking for PlayStation 2 GS support... no
checking for PlayStation 3 Cell support... no
checking for libVGL support... no
checking for wscons support... no
checking for OpenGL (GLX) support... yes
checking for Linux 2.4 unified input interface... yes
checking for Touchscreen library support... no
checking for hid_init in -lusbhid... no
checking usb.h usability... yes
checking usb.h presence... yes
checking for usb.h... yes
checking libusb.h usability... no
checking libusb.h presence... no
checking for libusb.h... no
checking for hid_init in -lusb... no
checking for usbhid... no
checking for pthreads... yes
checking for recursive mutexes... yes
checking for pthread semaphores... yes
checking for sem_timedwait... yes
checking linux/version.h usability... yes
checking linux/version.h presence... yes
checking for linux/version.h... yes
checking for GCC -Wall option... yes
checking for necessary GCC -Wno-multichar option... no
configure: creating ./config.status
А пульса желательна. Не вопрос - пересобрал с ней. Теперь ldd такой:
# ldd /usr/lib64/libSDL-1.2.so.0.11.4
linux-vdso.so.1 => (0x00007fff5c376000)
libm.so.6 => /lib64/libm.so.6 (0x00002b82846b8000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002b828493b000)
libpulse-simple.so.0 => /usr/lib64/libpulse-simple.so.0 (0x00002b8284b40000)
libpulse.so.0 => /usr/lib64/libpulse.so.0 (0x00002b8284d4d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b8284f9b000)
libc.so.6 => /lib64/libc.so.6 (0x00002b82851b8000)
/lib64/ld-linux-x86-64.so.2 (0x00002b82841d2000)
libcap.so.1 => /lib64/libcap.so.1 (0x00002b8285511000)
librt.so.1 => /lib64/librt.so.1 (0x00002b8285715000)
libSM.so.6 => /usr/lib64/libSM.so.6 (0x00002b828591f000)
libICE.so.6 => /usr/lib64/libICE.so.6 (0x00002b8285b29000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x00002b8285d44000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x00002b8286051000)
libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00002b8286253000)
Блин, что так некрасиво? Как можно собрать libSDL с пульсой без жёсткой зависимости?