Кажется, проблема в том, что файлы .o внутри файлов .a связаны только в том случае, если они нужны исполняемому файлу (очевидно, это называется "зачистка"). В моем случае символы требуются только для разделяемой библиотеки, которая явно открывается с помощью команд dl. Я могу связать с опцией --whole-archive (по крайней мере, в GNU), которая заставит связать все объекты в архиве.