Я прочитал эту ссылку и понимаю, о чем она говорит.

Как показано на этом изображении, у меня вопрос о динамических библиотеках.
Говорить, что я написал программу на C++. Насколько я понимаю, когда я использую какой-либо компилятор, например gcc, для компиляции моей программы (например, g++ main.cpp), речь идет о выполнении работы данного шага. 3 и шаг 4, что означает, что речь идет только о компиляции и связывании статических библиотек.
Однако, как мы все знаем, мы можем добавить -lXXX или -LXXX к g++, чтобы сообщить ему, где находятся необходимые динамические библиотеки. . Насколько я понимаю, речь идет о шаге 5 на этом изображении.
Так что теперь я в замешательстве. Если команда g++ выполняет работу по компиляции и связыванию статических библиотек, почему мы можем и должны передать ей динамические библиотеки? (если нет, то будут некоторые неопределенные ошибки ссылок)
Нужна ли динамическая библиотека при компиляции и компоновке? Если да, то почему на этом изображении показано, что шаг 5 — это часть запуска, а не часть сборки?