关于链接如何工作的信息很少.此外,IDE会隐藏编译的详细信息,如果您的项目存在与链接相关的问题,这将是一个真正的痛苦.
通常C++书籍告诉我
C++ code --> preprocessed c++ code --> object code
Run Code Online (Sandbox Code Playgroud)
但他们真的没有详细说明普通开发人员应该知道的关于链接的事情,尽管链接错误很常见.一个新的C++程序员应该如何知道如何处理如下错误?
XmlRpcSocket.o:XmlRpcSocket.cpp:(.text+0x48b): undefined reference to `WSAGetLastError@0'
Run Code Online (Sandbox Code Playgroud)
但是这个问题并不是特别针对这个问题(-lwsock32解决了它).问题是缺乏关于链接的一般知识.我的大学C++讲师谈到了一张幻灯片和一些黑盒子的链接.
此外,关于链接如何工作的资源很少,我认识的大多数人仍然认为链接是一个黑盒操作.我所学到的关于链接的知识是通过实验,并且有点"沿途"选择它,但这种方法的问题在于它引发的问题多于答案.
例如:我知道.LIB文件是库文件,它们是目标文件包.现在,应该如何构建和使用.LIB文件?什么时候需要使用.LIB文件?当我建立静态.LIB文件或引用DLL的文件时?当我将.LIB文件与我的目标文件链接时,是否所有内容都被复制,或者只是我使用的目标文件?我应该何时构建DLL/so文件而不是静态链接?我是否必须了解目标文件的内部结构以解决常见问题?关于名称修改我需要知道些什么?什么时候相关?如果其中一个dll加载旧的msvcrt,我可以将几个不同的标准库链接到我的项目吗?等等
显然,我不希望一次性回答上面列出的所有问题.我只需要知道从哪里开始.有没有像"每个程序员应该知道什么关于记忆"的资源,谈论链接?因此,我需要资源来学习,并了解我应该从哪个方向了解链接过程.
每个开发人员应该知道关于链接的事情是什么?