vs windows窗体连接sqlite3报错。
2012-01-19 20:22:08 来源: 点击:
vs windows窗体连接sqlite3报错。win32应用程序完全没问题,数据库可以打开和读取等,windows应用窗体就不行了,正确配置了lib和include的路径,报的错莫名其妙:1 > sqlitetest1.obj : error LNK2031: 无法为 "extern "C" int __clrcall sqlite3_close(struct sqlite3 *)" (?sqlite3_close@@$$J0YMHPAUsqlite3@@@Z) 生成 p/invoke;元数据中缺少调用约定1 > sqlitetest1.obj : error LNK2031: 无法为 "extern "C" void __clrcall sqlite3_free_table(char * *)" (?sqlite3_free_table@@$$J0YMXPAPAD@Z) 生成 p/invoke;元数据中缺少调用约定1 > sqlitetest1.obj : error LNK2031: 无法为 "extern "C" int __clrcall sqlite3_get_table(struct sqlite3 *,char const *,char * * *,int *,int *,char * *)" (?sqlite3_get_table@@$$J0YMHPAUsqlite3@@PBDPAPAPADPAH3PAPAD@Z) 生成 p/invoke;元数据中缺少调用约定1 > sqlitetest1.obj : error LNK2031: 无法为 "extern "C" int __clrcall sqlite3_open(char const *,struct sqlite3 * *)" (?sqlite3_open@@$$J0YMHPBDPAPAUsqlite3@@@Z) 生成 p/invoke;元数据中缺少调用约定1 > sqlitetest1.obj : warning LNK4248: 无法解析 typeref 标记(01000023)(为“sqlite3”);映像可能无法运行1 > sqlitetest1.obj : error LNK2028: 无法解析的标记(0A00001C) "extern "C" int __clrcall sqlite3_close(struct sqlite3 *)" (?sqlite3_close@@$$J0YMHPAUsqlite3@@@Z),该标记在函数 "bool __clrcall search_string_with_sql(char *,int)" (?search_string_with_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2028: 无法解析的标记(0A00001D) "extern "C" void __clrcall sqlite3_free_table(char * *)" (?sqlite3_free_table@@$$J0YMXPAPAD@Z),该标记在函数 "bool __clrcall search_string_with_sql(char *,int)" (?search_string_with_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2028: 无法解析的标记(0A00001E) "extern "C" int __clrcall sqlite3_get_table(struct sqlite3 *,char const *,char * * *,int *,int *,char * *)" (?sqlite3_get_table@@$$J0YMHPAUsqlite3@@PBDPAPAPADPAH3PAPAD@Z),该标记在函数 "bool __clrcall search_string_with_sql(char *,int)" (?search_string_with_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2028: 无法解析的标记(0A00001F) "extern "C" int __clrcall sqlite3_open(char const *,struct sqlite3 * *)" (?sqlite3_open@@$$J0YMHPBDPAPAUsqlite3@@@Z),该标记在函数 "bool __clrcall search_string_with_sql(char *,int)" (?search_string_with_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2019: 无法解析的外部符号 "extern "C" int __clrcall sqlite3_close(struct sqlite3 *)" (?sqlite3_close@@$$J0YMHPAUsqlite3@@@Z),该符号在函数 "bool __clrcall search_string_with_sql(char *,int)" (?search_string_with_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2019: 无法解析的外部符号 "extern "C" void __clrcall sqlite3_free_table(char * *)" (?sqlite3_free_table@@$$J0YMXPAPAD@Z),该符号在函数 "bool __clrcall search_string_with_sql(char *,int)" (?search_string_with_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2019: 无法解析的外部符号 "extern "C" int __clrcall sqlite3_get_table(struct sqlite3 *,char const *,char * * *,int *,int *,char * *)" (?sqlite3_get_table@@$$J0YMHPAUsqlite3@@PBDPAPAPADPAH3PAPAD@Z),该符号在函数 "bool __clrcall search_string_with_sql(char *,int)" (?search_string_with_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2019: 无法解析的外部符号 "extern "C" int __clrcall sqlite3_open(char const *,struct sqlite3 * *)" (?sqlite3_open@@$$J0YMHPBDPAPAUsqlite3@@@Z),该符号在函数 "bool __clrcall search_string_with_sql(char *,int)" (?search_string_with_sql@@$$FYM_NPADH@Z) 中被引用1 > D:\work\sqlitetest1\Debug\sqlitetest1.exe : fatal error LNK1120: 8 个无法解析的外部命令1 > 1 > 生成失败。1 个答案
-
答案 1:
答案调试信息很清楚了,编译器开了clr, 默认调用约定成了_clrcall, 而实际上sqlite函数使用的是_cdecl, 调用约定不正确linker就出错了,解决方法之一就是你在用到的sqlite3函数之前,明确是cdecl应该就能解决。 PS:中文版的VS描述很蛋疼。。比如(windows应用窗体,一些调试信息解释)个人觉得还是使用英文版的好,兄弟不妨试一下。
相关热词搜索:
上一篇:米聊和微信竞争,相对来说有哪些优势和机会?
下一篇:windows mobile 6.1的优势与劣势?