我正在尝试构建一个使用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文件
1条答案
按热度按时间zbsbpyhn1#
这行代码被记录在sqlite中以编译一个SQLite DLL。问题是,它不导出任何函数,也不为本机编程创建一个.lib。
解决方案是通过设置SQLITE_API预处理器定义来导出API函数:
所有的学分去马里奥和@drescherjm找到这个页面https://protyposis.net/blog/compiling-sqlite-as-dll-with-msvc/
正如@drescherjm所提到的,默认情况下,msvc不会将符号导出到dll中。请查看以下答案以了解详细说明:https://stackoverflow.com/a/32284832/487892