我正在尝试构建一个使用sqlite3存储和获取数据的应用程序,直到现在我使用了介子来生成我的项目,现在我正处于一个需要VS 2022进行调试的阶段,在转换到VS时,我不得不生成一个正确的sqlite3 DLL,因为当我使用GCC编译sqlite3.c (源文件)时
gcc -shared sqlite3.c -o sqlite3.dll
并使用gendef或dumpbin生成导出,然后生成一个虚拟.lib文件在VS项目中链接,所有这些都可以正常工作,但是当我使用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文档中的构建命令,仍然是相同的错误。
cl sqlite3.c -link -dll -out:sqlite3.dll
即使是上面的命令也没有生成正确的.def文件
发布于 2022-11-27 18:46:15
cl sqlite3.c -link -dll -out:sqlite3.dll
这一行记录在sqlite中,以编译SQLite动态链接库。问题是,它没有导出任何函数,也没有为本机编程创建.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
https://stackoverflow.com/questions/74591989
复制相似问题