如何在 MinGW 和 Visual Studio (MSVC) 之间共享 DLL
如何在 MinGW 和 Visual Studio (MSVC) 之间共享 DLL
✅ .dll.a 和 .lib 是什么?
1. .dll.a(MinGW 下的 import library)
- 作用:链接时告诉编译器如何调用 DLL 中的函数。
- 谁用它:MinGW 编译器(如 g++)。
- 来源:使用
dlltool或编译 DLL 时自动生成。
2. .lib(MSVC 下的 import library)
- 作用:和
.dll.a一样,用于链接阶段告诉 MSVC 编译器如何调用 DLL 中的函数。 - 谁用它:Visual Studio(MSVC)。
- 来源:由
lib.exe工具或 DLL 项目自动生成。
✅ 你有哪些文件需要共享?
例如:
log4cpp.dll(运行时文件)log4cpp.dll.a(MinGW链接时使用)log4cpp.def(可选,导出函数定义)log4cpp.lib(你可能需要为 VS 生成)
✅ 使用场景举例
| 场景 | 所需文件 | 编译器 |
|---|---|---|
| MinGW 使用 log4cpp.dll | log4cpp.dll.a, log4cpp.dll | g++ |
| MSVC 使用 log4cpp.dll | log4cpp.lib, log4cpp.dll | cl (VS) |
✅ 如何从 .dll.a / .def 生成 .lib(供 VS 用)
方法一:你已经有 .def 文件(推荐)
lib.exe /def:log4cpp.def /out:log4cpp.lib /machine:x64
方法二:从 .dll 生成 .def(如果没有 .def 文件)
# 第一步:dump 出导出表
dumpbin /exports log4cpp.dll > log4cpp.exports.txt# 第二步:手动或用脚本生成 log4cpp.def
# 格式大致如下:
LIBRARY log4cpp.dll
EXPORTSsymbol1symbol2...# 第三步:生成 .lib
lib.exe /def:log4cpp.def /out:log4cpp.lib /machine:x64
✅ MinGW 怎么生成 .dll.a 和 .dll
你已经在用 ADD_LIBRARY(... SHARED ...) 和 CMAKE_DEBUG_POSTFIX "d",CMake 自动生成 .dll 和 .dll.a:
liborocos-log4cpp.dll # 运行时库
liborocos-log4cpp.dll.a # 供 g++ 链接用
✅ 在 VS 中使用 MinGW 编译的 DLL
你需要:
- 生成
log4cpp.lib(方法见上) - 添加
.lib到 VS 工程的 Linker -> Input - 添加
log4cpp.dll到可执行文件目录(或放在 PATH 下) - 添加头文件路径(即 include)
