Следует сказать, что попытка заменить функции из libc в вашем приложении имеет неопределенное поведение в соответствии с ISO C / POSIX, независимо от того, выполняете ли вы это статически или динамически. Это может работать (и в основном будет работать на GNU / Linux), но не стоит полагаться на это. Если вы просто хотите использовать имя «printf», но у вас есть что-то нестандартное в вашей программе, лучший способ сделать это - #undef printf
и #define printf my_printf
ПОСЛЕ включая любые системные заголовки. Таким образом, вы не будете вмешиваться в какое-либо внутреннее использование функции библиотеками, которые вы используете ... и ваша реализация my_printf может даже вызвать системный printf, если / когда это потребуется.
С другой стороны, если ваша цель - вмешиваться в то, что делают библиотеки, где-то внизу вы, вероятно, столкнетесь с проблемами совместимости. Лучшим подходом, вероятно, было бы выяснить, почему библиотека не будет выполнять то, что вам нужно, без переопределения функций, которые она использует, исправления и отправки исправлений в исходное состояние, если они уместны.