C++ 每个C++;开发人员应该了解链接 问题

C++ 每个C++;开发人员应该了解链接 问题,c++,linker,C++,Linker,关于链接如何工作的详细信息很少。IDE还隐藏了编译的细节,当您的项目存在链接相关的问题时,这是一个真正的难题 通常C++书籍告诉我 C++ code --> preprocessed c++ code --> object code 但是,尽管链接错误是常见的,但是他们实际上并没有对普通开发人员应该知道的链接进行太多的详细说明。一个新的C++程序员应该如何知道如何处理下面这样的错误? XmlRpcSocket.o:XmlRpcSocket.cpp:(.text+0x48b): un

关于链接如何工作的详细信息很少。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,我可以将几个不同的标准库与我的项目链接起来吗?等等

问题 显然,我不希望一下子就能回答上面列出的所有问题。我只是想知道从哪里开始。有没有像“每个程序员都应该知道的关于内存的知识”这样的关于链接的资源?因此,我需要学习资源,以及您对我应该向哪个方向学习链接过程的见解

关于链接,每个开发人员都应该知道哪些事情?

有大量的资源

我想这对一个“初学者”来说可能太难了

就“Windows”而言,您可能比从这里开始做得更糟:

我还建议:

“希望有帮助:)

附言:

作为澄清:

  • 您想知道您“编译”(成机器代码)的位是如何通过“链接”组合在一起的。一个完全公平的问题:)

  • 了解一点机器代码与“正在运行的程序”的关系也会有所帮助

  • 。。。以及“正在运行的程序”如何使用(static).exe中的一些位,以及动态运行时(.dll)或“动态链接库”中的其他位

  • 所有这些细节通常都是完全特定于平台和操作系统的

  • 因此,链接(多种多样)


再次,我希望所有这些都有助于你的初始问题。

< P>如果你开始编程/ C++,我将从对静态和动态LIB是如何工作的了解开始,并做一些教程来制作一个.dll和.Lb.。谷歌是你最好的朋友:我只是找到了这个例子。

注意,你制作LIB的方式取决于C++编译器。我头上的编译器是一个集成开发环境(IDE)。像Visual Studio一样,也就是GNU C++编译器。

< P>我强烈推荐阅读John Levine的书。大部分书是你应该买书并支持作者的。这本书教了我很多关于如何真正地去挖掘二进制文件。

< P>你应该知道的一点是ODR,特别是它对于“代码>内联< /代码>意味着什么。符号


这可能是一个好的开始。

C++语言目前不支持模块和库,所以这种支持通常是通过实现特定的语言扩展来完成的。最好是针对特定的操作系统和编译器问相同的问题。它在POSIX和Windows中的操作方式非常相似。文件。在两个系统上都有未定义的引用错误。对象文件格式不同,但有很多共同点。这个问题不是关于C++官方文档关于链接的说法,我知道标准是链接实现细节。它是关于C++世界中链接的常见实践。在C++中,如“代码”>“Sy-DeStutc”(DLRouest:<代码> >为C++代码),在UNIX中,它可能是类似于“代码”>“AyAtEdTeTyx”((x,ViiBiLyItIy(“默认”)))/<代码>,用于支持正确的链接。请,如果您想回答如何解释链接,请询问“C++中链接工作是如何工作的”。“.你真的不需要写一整部小说,讲述你自己已经知道的所有事情和你所面临的问题,这些让你想起你来自肯塔基州的叔叔,他曾经。。。等等这一切都无关紧要,它只会淡化问题,让人们想结束它。我不会为你编辑它,因为这将是一个重大的改变,但我真的相信,如果你只是坚持你的问题,而不暴露,你会得到更好的答案。本问题的后续行动: