Как было указано, символы из архива, на которые нет ссылок, не попадают в выходной двоичный файл, поскольку компоновщик по умолчанию отбрасывает их.
Чтобы переопределить это поведение при связывании со статической библиотекой, можно использовать опции --whole-archive
/ --no-whole-archive
для компоновщика, например:
gcc -c main.c
gcc -c foo.c
ar rcs foo.a foo.o
gcc -o test -Wl,--whole-archive foo.a -Wl,--no-whole-archive main.o
Это может привести к раздутому двоичному файлу, потому что все символы из foo.a
будут включены компоновщиком в вывод, но иногда это оправдано.