问题
关于链接的详细信息很少。同时,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文件?当我将一个.LIB文件与我的对象文件进行链接时,是否所有东西都被复制进去,还是只有我使用的对象文件?何时应该构建DLL / so文件而不是静态链接?我必须了解对象文件的内部结构才能解决常见问题吗?我需要了解哪些关于名称修饰方面的知识?何时相关?如果其中一个dll加载旧的msvcrt,我可以将几个不同的标准库与我的项目链接在一起吗?等等。问题
显然,我并不希望一次回答上面列出的所有问题。我只需要知道从哪里开始。是否有像“每个程序员都应该了解的关于内存的事情”这样的资源,可以谈论链接?所以,我需要学习的资源和你对我学习链接过程应该走向哪个方向的见解。
每个开发人员应该了解哪些与链接相关的东西?
__declspec(dllexport)
之类的内容编写到C++代码中,在Unix中,这可能是支持正确链接的__attribute__((__visibility__("default")))
之类的东西。 - Öö Tiib