Ваша основная программа должна экспортировать функцию ведения журнала и сообщить об этом в DLL. Ваша DLL должна экспортировать функцию, такую как InitLogging, которая берет указатель на функцию и сохраняет переданное значение где-то в своих глобальных данных.
Альтернативой является помещение вашей "основной" программы в другую DLL и создание основной "заглушки", которая связывает все библиотеки DLL вместе.
(В Windows DLL могут вызывать функции друг друга, но DLL не может вызывать функцию в основной программе. В Unix это намного проще, поскольку совместно используемые объекты могут напрямую вызывать функции основной программы.)