c++ - 如何将 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 的结果不同?我该如何解决这个问题?谢谢你。
解决方案
推荐阅读
- sql - 自定义 SQL 锁定方案的安全性
- php - Elasticsearch 抛出 http 方法异常。Platform.sh 上的 Symfony 4.4
- python - 使用 numpy getfromtxt 从多个文件循环导入数据
- javascript - 查找与子字符串匹配的所有数组值,并使用 JavaScript 中的循环更新该重复的数组值
- sql - STRING_AGG 来自另一列的特定字符串除外
- sql - sql-server中'ANY'和'EXISTS'有什么区别
- ngx-bootstrap - ngx-bootstrap timepicker 当只用键盘输入小时时,值保持未定义
- reactjs - 如何在打字稿中引用命名空间作为类型
- permissions - 如何通过脚本定义 Hasura 权限
- python - 如何将数据库表从一个数据库复制到另一个数据库