Библиотека работает нормально. Программа сообщает правильное значение даже при работе под gdb. Кажется, что ошибка связана с тем, что gdb оценивает выражение и заставляет целевую программу вызывать функцию. Я тоже вижу такое же поведение на 10.04. Странно p printf ("foo \ n") корректно печатает 4.
Кажется, что gdb запутан, потому что strlen является встроенным. Если вы это сделаете:
int (* len) (char *) = strlen;
И затем получите gdb print len ("foo"), вы получите правильный результат.