c++ - 链接器、库和目录信息

标签 c++ linker c-preprocessor

我已经完成了我的两个 C++ 1/2 类(class),但我们没有涵盖任何关于链接到库或向 C++ 代码添加额外库的内容。

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

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

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

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

到目前为止,我发现:

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

最佳答案

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

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

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

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

关于c++ - 链接器、库和目录信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2840908/

相关文章:

c++ - 如何处理静态存储时长警告?

c++ - C++中函数的多重定义

C 宏串联作为函数参数

c++ - void Classname::operator()(){ .... } 做什么?

c++ - 在 WinPE 中检测交流电源连接?

c - 第一个示例由于编译器错误而无法编译

c++ - C++错误LNK2019 : unresolved external symbol _main referenced in function _tmainCRTStartup

c++ - 链接器错误 2001 未解析的外部符号

c++ - 如何处理 C++ 文件以删除 ifdef 输出代码

c++ - AFAIK,下面的代码不应该编译,但它在 clang 和 GCC 中编译。我在这里错过了什么?