问题
关于链接如何详细工作的信息很少。此外,IDE 隐藏了编译的细节,当您的项目遇到一些与链接相关的问题时,这真的很痛苦。
通常 C++ 书籍会告诉我
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/so 文件而不是静态链接?我是否必须了解目标文件的内部结构才能解决常见问题?关于姓名修饰,我必须了解什么?什么时候相关?如果其中一个 dll 加载旧的 msvcrt,我可以将几个不同的标准库链接到我的项目吗?等等
问题
显然,我不希望一口气回答上面列出的所有问题。我只需要知道从哪里开始。有没有像“每个程序员应该知道的关于内存的知识”这样的资源,它谈到了链接?因此,我需要学习资源以及您对我应该从哪个方向学习链接过程的见解。
每个开发人员都应该了解链接的哪些内容?