由于MinGW是从Linux平台移植过来的,又需要支持与MSVC编译库交叉链接,又有x32/x64、Debug、Release等相互兼容问题,导致其输出格式比较混乱。
一般而言,MSVC生成的动态库扩展名为dll,静态库扩展名为lib。但在很多时候,链接动态库还需要一个相应的lib文件指明链接信息。这个lib文件并没有具体二进制码,只是一个函数名的信息头。
Linux下,GCC链接生成的动态库扩展名为.so,静态库扩展名为.a。对于MinGW来说,已经不区分.dll还是.so了,可以直接链接。
-
生成动态库
- 生成.o文件后g++ -shared -o xxx.dll xxx.o 即可 生成附加信息头
- g++ -o xxx.dll xxx.c -shared -Wl,–out-implib=libxxx.a 生成静态库
- ar rcs -o libxxx.a xxx.o
有时,生成的.a文件不被MSVC识别,此时可以添加-g参数以使其包含debug信息
此外,MinGW还支持-static参数,据说是能够以静态方式加载动态库。我实验了如果是单源文件确实可以切换到对于stdc++标准库的静态链接。但是自己生成的dll即便加了也没用。。。
附:所用测试代码:
main.cpp
class AA
{
public