如何在 MinGW 和 Visual Studio (MSVC) 之间共享 DLL

发布于:2025-05-01 ⋅ 阅读:(23) ⋅ 点赞:(0)

如何在 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
EXPORTS
  symbol1
  symbol2
  ...

# 第三步:生成 .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

你需要:

  1. 生成 log4cpp.lib(方法见上)
  2. 添加 .lib 到 VS 工程的 Linker -> Input
  3. 添加 log4cpp.dll 到可执行文件目录(或放在 PATH 下)
  4. 添加头文件路径(即 include)

网站公告

今日签到

点亮在社区的每一天
去签到