关于链接如何工作的信息很少.此外,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,我可以将几个不同的标准库链接到我的项目吗?等等
显然,我不希望一次性回答上面列出的所有问题.我只需要知道从哪里开始.有没有像"每个程序员应该知道什么关于记忆"的资源,谈论链接?因此,我需要资源来学习,并了解我应该从哪个方向了解链接过程.
每个开发人员应该知道关于链接的事情是什么?
有大量的资源。
我想这对于“初学者”来说可能是难以承受的;)
就“Windows”而言,你可以做得比从这里开始更糟糕:
我还推荐这个:
'希望有帮助:)
附:
作为澄清:
您想知道您“编译”(成机器代码)的位如何通过“链接”组合在一起。一个完全公平的问题:)
了解一些机器代码与“正在运行的程序”的关系也很有帮助......
...以及“正在运行的程序”如何使用(静态).exe 中的某些位以及动态运行时(.dll 或“动态链接库”)中的其他位。
所有这些细节通常完全是特定于平台和操作系统的
因此有(不同的)链接。
再次,我希望所有这些对您最初的问题有所帮助。