c - 当要求链接 .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
在这个命令中,我们使用
-L
and-l
来告诉g++
在哪里可以找到.a
文件(非.DLL
文件或.so
文件)以进行链接。但是,据我了解-此命令应该动态链接库。众所周知,.a
文件是静态库文件。我错过了什么?为什么我们不链接
.DLL
库的文件,而是链接这些.a
文件?执行时,该.DLL
文件必须存在于可执行文件附近,但.a
据我所知,不必如此。再说一次,我错过了什么?
解决方案
-l
不仅适用于动态库。它也可以用来链接静态库。
在 Linux 上,直接链接 .so 文件(相当于 .dll)是正常的。在 Windows 上,仍然可以这样做(我认为),但是链接一个名为import library的 .lib 文件更为正常,该文件包含 .dll (链接到 .lib 和 .lib 链接到.dll)。由于您没有使用 Microsoft 工具链,因此您的工具链可能仍使用导入库,但将它们称为 .a 文件而不是 .lib 文件。
推荐阅读
- c# - 自定义授权过滤器如何处理角色?
- javascript - 将 react-router-dom 从 4 升级到 5
- matrix - 如何并行查找大矩阵的特征值?
- events - 动态更改 dropzone 上的可点击属性
- python - 在类中定义函数
- mips - 如何在 MIPS 中以最佳方式将一个寄存器设置为存储在另一个寄存器中的值?
- c++ - 没有 QApplication 就不能使用 QEventloop
- javascript - String.split(" ") 和 String.split(/ +/g) 有什么区别吗?
- php - 注意(8):未定义的索引
- python - 绘制具有相同 X 和不同 Y 的多个数据集