首页 > 解决方案 > 当要求链接 .a 文件时,g++ / gcc 会做什么?

问题描述

我正在阅读有关在 MingW 和 Windows 上使用 SDL 库进行 C 开发的教程。(本教程实际上是关于 C++,但我假设安装和构建是相同的)。

本教程提供了以下用于构建程序的命令:

g++ 01_hello_SDL.cpp -IC:\mingw_dev_lib\include\SDL2 -LC:\mingw_dev_lib\lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2 -o 01_hello_SDL
  1. 在这个命令中,我们使用-Land-l来告诉g++在哪里可以找到.a文件( .DLL文件或.so文件)以进行链接。但是,据我了解-此命令应该动态链接库。众所周知,.a文件是静态库文件。我错过了什么?

  2. 为什么我们不链接.DLL库的文件,而是链接这些.a文件?执行时,该.DLL文件必须存在于可执行文件附近,但.a据我所知,不必如此。再说一次,我错过了什么?

标签: clinkerlibraries

解决方案


-l不仅适用于动态库。它也可以用来链接静态库。

在 Linux 上,直接链接 .so 文件(相当于 .dll)是正常的。在 Windows 上,仍然可以这样做(我认为),但是链接一个名为import library的 .lib 文件更为正常,该文件包含 .dll (链接到 .lib 和 .lib 链接到.dll)。由于您没有使用 Microsoft 工具链,因此您的工具链可能仍使用导入库,但将它们称为 .a 文件而不是 .lib 文件。


推荐阅读