Linker,Libraries&目录信息

时间:2010-05-15 16:45:33

标签: c++ linker c-preprocessor

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

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

有人能指出我关于Cpp应用程序中#includ文件和link文件的术语和基本信息的正确方向吗?基本上我想要/需要知道关于这个过程的一切。 .dll.lib.o.lib.a.dll.a之间的差异。 .h和“库”之间的区别(.dll,.lib是否正确?)

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

请指出我正确的方向! :

到目前为止,在我的任务中,我发现了:

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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