Днес се натъкнахме на необичаен феномен, колега извикваше нормално работеща функция в кода си, която задействаше segfault в libc (gethostbyname). Озадачаващото беше, че същата функция работи без проблеми в други изходни файлове в същото време на изпълнение. Учудващо, segfault изчезна, когато беше използван valgrind, всъщност той работи перфектно с valgrind, без докладвани грешки.
След много жертви, за да успокоим боговете на компилатора, в крайна сметка осъзнахме, че заглавният файл, деклариращ функцията, липсва от изходния файл, който извика функцията. След като добавихме това, всичко заработи нормално.
Защо gcc/ld не генерира грешка (или дори предупреждение), показваща, че функцията не е разпозната?, защо работи с valgrind?
Благодаря.