【发布时间】:2019-05-10 12:06:52
【问题描述】:
在 Windows C++ 中,当您想要链接到 DLL 时,您必须提供导入库。但是在 GNU 构建系统中,当您想要链接与 dll 等效的 .so 文件时,您不需要。为什么是这样?是否有等效的 Windows 导入库。
注意:我没有谈论在 Windows 中使用 GNU C++ 的情况,在这种情况下你也必须使用导入库。分界线在 Windows C++ 和 Linux C++ 之间。
【问题讨论】:
-
标准 C++ 是为抽象硬件设计的。它忽略了操作系统和实现细节。
-
不要将 Linux 视为等同于 Windows 的东西。用新的眼光看待 Linux!
-
您只需链接到库。例如,要链接到
libssl.so,您将在命令字符串中包含-lssl(您的选项中不包含lib部分(例如-lssl)。如果库不在您添加的标准搜索路径中-L/path/to/lib将该目录添加到搜索路径。(如果需要其他部分,该库必须知道它所在的位置。在构建库时,链接器-rpath选项可以提供帮助。 -
(注:这个问题与C++语言无关)好吧,导入库只包含可以自动生成链接时间的代码。实际上,这就是 gcc-for-windows (mingw) 所做的:它可以链接 *.dll 文件而不使用 *.lib 文件。注意:永远不要使用包含 ordinals 的 *.lib 文件:您可能会得到无法在不同版本的 Windows 上运行的可执行文件。