Ваша команда сборки находится в неправильном порядке, и порядок имеет значение.
GCC читает слева направо, беря символы из библиотек, когда он уже знает, что нуждается в них. Когда вы ставите program.cpp
последним, вы не сообщаете об этом до тех пор, пока все перечисленные библиотеки не будут идентифицированы и удалены.
Сначала укажите program.cpp
, а затем необходимые библиотеки.
g++ -o program program.cpp -lboost_filesystem -ldl -lboost_system
Да, это немного странно. (Еще более странно, что он работал на Debian! Хотя, по-видимому, только в некоторых «последних» дистрибутивах Linuxy по умолчанию включено --as-needed
, что и вызывает поведение, которое вы видите, показывая, что такое поведение не обязательно гарантировано. Возможно, Debian 9 просто не работает сделай это.)
Подробнее: