Что каждый разработчик C ++ должен знать о связывании [закрыто]

The problem

Информация о том, как работает связь в деталях, скудна. Кроме того, IDE скрывают детали компиляции, что является реальной болью, когда у вас есть проблемы со связыванием вашего проекта.

Обычно книги по С ++ говорят мне, что

C++ code --> preprocessed c++ code --> object code

Но они действительно не вдавались в подробности того, что должен знать рядовой разработчик о связывании, несмотря на тот факт, что ошибки связывания распространены. Как новый программист C ++ должен знать, как справиться с ошибкой, подобной следующей?

XmlRpcSocket.o:XmlRpcSocket.cpp:(.text+0x48b): undefined reference to `WSAGetLastError@0'

Но этот вопрос не относится конкретно к этой проблеме (-lwsock32 решает ее). Проблема заключается в отсутствии общих знаний о связывании. Мой преподаватель C ++ в университете говорил о связывании на время одного слайда с несколькими черными ящиками на нем.

Кроме того, ресурсы о том, как работает связывание, скудны, и большинство людей, которых я знаю, по-прежнему считают связывание операцией черного ящика. То, что я узнал о связывании, это через эксперименты, и вроде как «поднял его по пути», но проблема этого подхода в том, что он вызывает больше вопросов, чем ответов.

Например: я знаю, что .LIB-файлы - это библиотечные файлы, которые являются пакетами объектных файлов. Теперь, как создать и использовать файл .LIB? Когда желательно использовать файл .LIB? Когда можно создавать статические файлы .LIB или файлы, которые ссылаются на библиотеки DLL? Когда я связываю файл .LIB со своими объектными файлами, все ли копируется, или только те объектные файлы, которые я использую? Когда я должен создавать DLL-файлы / файлы вместо статических ссылок? Нужно ли мне узнавать о внутренней структуре объектных файлов для решения типичных проблем? Что я должен знать об искажении имен? Когда это актуально? Могу ли я связать несколько разных стандартных библиотек с моим проектом, если одна из библиотек загрузит старую версию msvcrt? и т.п.

The question

Очевидно, я не ожидаю ответа на все перечисленные выше вопросы за один раз. Мне просто нужно знать, с чего начать. Существует ли такой ресурс, как «Что должен знать каждый программист о памяти», в котором говорится о связывании? Итак, мне нужны ресурсы для изучения и ваше понимание того, в каком направлении мне идти, чтобы узнать о процессе связывания.

Что каждый разработчик должен знать о ссылках?

Ответы на вопрос(4)

Ваш ответ на вопрос