首页 > 解决方案 > 如何将 DLL 或 LIB 导出到 MinGW .a 文件以获得正确的链接

问题描述

我想使用从 DLL 导出的 .a 文件来链接 C++ 程序,我得到的完整存档是:一个头文件、一个 DLL 文件和一个由 VC++ 构建的 LIB。现在我使用 pexports 和 dlltool 将 DLL 函数导出到 .a 库中:

pexports some.dll -o > some.def
dlltool --dllname some.dll --def some.def --output-lib some.a

当我与 some.a 链接时,我从编译器收到错误:

  [Linker error] undefined reference to `some_function@8' 

所以我查看它定义的 some.def 文件,如下所示:

LIBRARY "some.dll"
EXPORTS
some_function  @1
some_function2 @2

然后我决定改用另一种方式从 VC++ 构建的 .LIB 文件中导出 .a 文件:

reimp some.lib
dlltool -d some.def -l libsome.a

然后我使用 libsome.a 正确获得了链接,因为 some.def 定义如下:

LIBRARY "some.dll"
EXPORTS
some_function  @8  --> ( param size? )
some_function2 @24

但是当我运行程序时出现运行时错误:在 some.dll 中找不到入口地址“some_function@8”...

为什么从 DLL 文件和 LIB 文件导出 .a 的结果不同?我该如何解决这个问题?谢谢你。

标签: c++cdllmingwlib

解决方案


推荐阅读