Я не самый большой эксперт по разделяемым библиотекам, поэтому я могу ошибаться здесь!
Если я правильно догадываюсь о том, что вы пытаетесь сделать, просто свяжите вашу общую библиотеку с libc.so. Вам не нужна дополнительная копия sscanf, встроенная в вашу библиотеку.
Я ответил на ваши вопросы, прежде чем понял, к чему вы клоните, на случай, если вы заинтересованы в ответах.
Есть ли способ указать ld разрешать только определенные символы при сборке общей библиотеки?
только внешние, не статические, функции и переменные попадают в таблицу символов общей библиотеки.
При создании общей библиотеки все символы, не найденные в объектах в командной строке компоновщика, останутся неразрешенными. Если компоновщик жалуется на это, вам, вероятно, нужно связать вашу общую библиотеку с shared libc. У вас могут быть общие библиотеки, которые зависят от других общих библиотек, и ld.so может работать с цепочками зависимостей.
Если бы у меня было больше представителей, я бы спросил это как комментарий:
У вас есть настроенная версия sprintf / sscanf, или ваша общая библиотека может использовать реализацию в -lc? Если с -lc все в порядке, мой ответ, вероятно, решит вашу проблему. Если нет, то вам нужно создать свою общую библиотеку из объектов, которые имеют только те функции, которые вам нужны. т.е. не связывать его с /usr/lib/libc.a.
Может быть, я запутался в твоих
libc.a (на самом деле не "настоящий" libc)
линия. /usr/lib/libc.a действительно glibc (в Linux). Это статически связанная копия того же кода в libc.so. Если вы не говорите о своем собственном libc.a (о чем я думал вначале) ...
Превратить libc.a в общую библиотеку?
Вы, вероятно, можете, но не можете, потому что он, вероятно, не скомпилирован как позиционно-независимый код, поэтому он потребует большого количества перемещений ld.so во время выполнения.
Извлеките sscanf из libc.a и укажите это в строке компоновщика?
Может быть возможно. ar t /usr/lib/libc.a для просмотра содержимого. (Аргументы ar аналогичны tar. tar был ar для лент .... Здесь используется старая школа Unix.) Вероятно, это не так просто, потому что sscanf, вероятно, зависит от символов в других файлах .o в .a.