Объяснение:
В современных компиляторах errno - не целое число, а некий объект в контексте нити (TLS-Thread local storage), который может отличаться по размеру от целого. Соответственно, объявление в коде программы
extern int errno;
генерирует неверный код.
Способ исправления:
Добавить в файл строчку
#include <errno.h>
или в опции компилятора
-include /usr/include/errno.h