【问题标题】:Linker, Libraries & Directories Information链接器、库和目录信息
【发布时间】:2010-05-15 16:45:33
【问题描述】:

我已经完成了我的两个 C++ 1/2 课程,并且我们没有涉及链接到库或向 C++ 代码添加其他库的任何内容。

我一直在努力解决这个问题;我一直无法找到对象的基本信息linking。最初我认为问题出在 IDE(Netbeans;和 Code::Blocks)。但是我一直无法设置wxWidgetsGTKMM

有人可以在 Cpp 应用程序中关于 #including 文件和 linking 文件的术语和基本信息指出正确的方向吗?基本上我想/需要知道关于这个过程的一切。 .dll.lib.o.lib.a.dll.a 的区别。 .h 和“库”之间的区别(.dll、.lib 对吗?)

我了解我需要阅读我正在使用的编译器文档;但是所有编译器(我知道的)都使用链接器和头文件;我需要了解这些信息。

请指点我正确的方向! :]

到目前为止,我发现:

  • Linker 将已编译的库链接到您的项目。
  • .a 文件是静态库(Windows 中为.lib
  • Windows 中的.dll 是共享库(*nix 中的.so

【问题讨论】:

标签: c++ linker c-preprocessor


【解决方案1】:

在类 Unix 系统上,您通常会在 /usr/lib 中找到库。 .a 扩展名表示您正在处理一个存档文件,例如使用ar 创建的。它们是从扩展名为 .o 的目标文件创建的。然后链接器可以在编译时解析引用。它们被称为静态库,因为目标文件中的机器代码被复制到最终的可执行文件中。

如果您以数学库为例,您会在 /usr/bin/libm.a 找到库本身,并在您的包含目录中找到相应的头文件(例如:/usr/include/math.h)。您必须包含编译器的标头 math.h,并为链接器指定库 libm.a 以解析编译器留下的引用。

共享库使用扩展名.so。如果您想要一个小的可执行文件,它们很有用。在这里,链接器不会解析引用,但是当启动可执行文件时,加载器会动态查找库,并根据未解析的引用将它们加载到内存中。

.dll 是 Microsoft Windows 的动态链接库,我对它们不是很熟悉,但我认为所涉及的步骤是相似的。

【讨论】:

  • 事情搞混了 - “当你现在使用 include [...] 时,你必须包括”
  • @Georg:我很着急。我稍微清理了一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
相关资源
最近更新 更多