Когда говорится, что при динамическом линковании компоновщик разрешает адреса разделяемых библиотек во время выполнения, означает ли это, что тот же компоновщик, который используется в статическом компоновщике, вызывается во время выполнения? Например, при использовании gcc, такого как gcc mysource.c -o myprog
, пропускает ли этап связывания, если используется динамическое связывание? Если используется динамическое связывание, вызывается ли один и тот же компоновщик gcc каждый раз, когда запускается программа, или этот компоновщик каким-то образом отличается (т.е. поставляется с операционной системой)?
Если используется динамическое связывание, а технически связывание еще не произошло, когда выводится исполняемый файл, почему этот файл является исполняемым (поскольку он пропустил этап связывания)? Или это не действительно исполняемый файл, пока не произойдет динамическое связывание?