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

kb5ga3dv  于 2022-11-30  发布在  SQLite
关注(0)|答案(1)|浏览(404)

我正在尝试构建一个使用sqlite3存储和获取数据的应用程序,到目前为止,我已经使用meson生成了我的项目,现在我正处于需要VS 2022进行调试的阶段,在转换到VS时,我无法生成正确的sqlite3 DLL,因为当我使用愚者编译sqlite3.c(源文件)时

gcc -shared sqlite3.c -o sqlite3.dll

并使用gendef或dumpbin生成导出,然后在VS项目内部链接一个虚拟的.lib文件,这一切都工作正常,但当我使用VS 2022将其编译为DLL时,gendef和dumpbin都失败了

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

gendef - sql.dll
 * [sql.dll] Found PE image

我知道sqlite3提供了一个DLL(运行良好),但为什么会存在这个问题,或者我做错了什么,PS我还使用了sqlite文档中的build命令,仍然出现同样的错误

cl sqlite3.c -link -dll -out:sqlite3.dll

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

zbsbpyhn

zbsbpyhn1#

cl sqlite3.c -link -dll -out:sqlite3.dll

这行代码被记录在sqlite中以编译一个SQLite DLL。问题是,它不导出任何函数,也不为本机编程创建一个.lib。
解决方案是通过设置SQLITE_API预处理器定义来导出API函数:

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

相关问题