【发布时间】:2011-07-25 04:44:24
【问题描述】:
我对今天学到的东西有点困惑。我希望有人可以帮助我。
我理解动态和静态链接的概念,但问题如下。在 windows 上,或者至少是 windows 上的范例,您可以拥有一个 .lib(类似于 .a)和 .dll(类似于 .so,除了...不同),并且您必须在 .lib 中静态链接包含在运行时从 dll 调用函数的代码。它是否正确?换句话说,gcc 或 g++ 必须在编译/链接时具有可用的 .lib 文件,并且能够在运行时找到 .dll 文件。请在此处纠正任何错误的假设。
但是,我将我的小应用程序中的一些源文件拆分出来,因为我想让它们成为一个库。当我在我的目标文件上运行 g++ 时,使用 -shared 选项,这基本上会创建一个共享库 (.so)?这就是产生混乱的地方。 same 所以文件在链接时和运行时都需要?我无法理解在链接时如何在 -L/-l 选项中需要它,但它在运行时仍然需要该文件。这真的是常态吗? dll 有根本不同吗?
最后,最后一个问题。在 Windows 上使用类似 boost 的库。我按照说明构建了boost。最后,stage/lib 目录包含以 name.a、name.dll.a、name.dll 重复顺序排列的库。这个计划的目的是什么?我知道我在运行时需要 dll 文件,但是当我在链接时使用 -L/-l 选项时,它使用的是什么文件?
对不起,如果这真的很分散,但我希望有人能帮助解决这个问题。非常感谢!
【问题讨论】:
-
Windows 上 boost 库的提示。至少在 Visual C++ 中,头文件具有告诉链接器要链接哪些库的编译指示,并且根本不需要 -l 选项。我猜 mingw 可能会有所不同。
标签: c++ g++ mingw dynamic-linking static-linking