首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Visual 2022编译时,无法使用gendef或dumpbin为DLL生成导出,但GCC工作正常,为什么?

使用Visual 2022编译时,无法使用gendef或dumpbin为DLL生成导出,但GCC工作正常,为什么?
EN

Stack Overflow用户
提问于 2022-11-27 16:56:08
回答 1查看 44关注 0票数 -2

我正在尝试构建一个使用sqlite3存储和获取数据的应用程序,直到现在我使用了介子来生成我的项目,现在我正处于一个需要VS 2022进行调试的阶段,在转换到VS时,我不得不生成一个正确的sqlite3 DLL,因为当我使用GCC编译sqlite3.c (源文件)时

代码语言:javascript
运行
复制
gcc -shared sqlite3.c -o sqlite3.dll

并使用gendef或dumpbin生成导出,然后生成一个虚拟.lib文件在VS项目中链接,所有这些都可以正常工作,但是当我使用VS 2022将其编译为DLL时,gendef和dumpbin都会失败。

代码语言:javascript
运行
复制
dumpbin /exports sql.dll
Microsoft (R) COFF/PE Dumper Version 14.33.31630.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file sql.dll

File Type: DLL

  Summary

        3000 .data
        E000 .rdata
        5000 .reloc
        1000 .rsrc
       AC000 .text

代码语言:javascript
运行
复制
gendef - sql.dll
 * [sql.dll] Found PE image

我知道sqlite3提供了一个DLL (它工作得很好),但是为什么存在这个问题,或者我做错了什么,PS我也使用了sqlite文档中的构建命令,仍然是相同的错误。

代码语言:javascript
运行
复制
cl sqlite3.c -link -dll -out:sqlite3.dll

即使是上面的命令也没有生成正确的.def文件

EN

回答 1

Stack Overflow用户

发布于 2022-11-27 18:46:15

代码语言:javascript
运行
复制
cl sqlite3.c -link -dll -out:sqlite3.dll

这一行记录在sqlite中,以编译SQLite动态链接库。问题是,它没有导出任何函数,也没有为本机编程创建.lib。

解决方案是通过设置SQLITE_API预处理器定义导出API函数:

代码语言:javascript
运行
复制
cl sqlite3.c -DSQLITE_API=__declspec(dllexport) -link -dll -out:sqlite3.dll

所有的学分都归功于马里奥和@drescherjm找到这个页面的https://protyposis.net/blog/compiling-sqlite-as-dll-with-msvc/

正如@drescherjm所提到的,默认情况下,msvc不会将符号导出到dll中。请参阅这个答案以获得一个良好的描述:https://stackoverflow.com/a/32284832/487892

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74591989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档