Linux не ставит символы перед префиксом _
, поэтому вы не используете Linux.
Но системный вызов clone(2)
специфичен для Linux, согласно его справочной странице .
clone () специфичен для Linux и не должен использоваться в программах, предназначенных
быть переносимым.
Возможно, вы используете OS X или что-то в этом роде. И вы компилируете как C, поэтому вызов необъявленной функции не является ошибкой во время компиляции (просто большое предупреждение). Вот почему это ошибка компоновщика, а не ошибка времени компиляции (и вы проигнорировали предупреждения компилятора.)
И, кстати, #define _GNU_SOURCE
после , включая заголовочные файлы, не имеет смысла. Вы должны определить макросы запроса возможностей до , включая заголовки, чтобы они могли определять прототипы для функций только для GNU в тех случаях, когда это уже не по умолчанию.