Это будет работать:
# Generate position independent code (PIC)
gcc -fPIC -c -o xxx.o xxx.c
# Build a shared object and link with static libraries
ld -shared -static -o xxx.so xxx.o
# Same thing but with static libc
ld -shared -static -o xxx.so xxx.o -lc
Уточнение: флаг -static, если он передан gcc, передается компоновщику (ld) и говорит ему работать со статической версией (.a) библиотеки (указанной с флагом -l), а не динамическая версия (.so).
Другое дело: в моей системе (Debian) последний пример выдает libc.a ... перекомпиляцию с ошибкой -fPIC . Я уверен, что это означает, что libc.a, установленный в моей системе, не был скомпилирован с -fPIC. Однако поиск в apt-cache libc pic дал некоторые результаты.
См. Также: Библиотека программ HOWTO , SO: объединение .so libs , ld (1) , gcc (1)