vs windows窗體連接sqlite3報錯。win32應(yīng)用程序完全沒問題,數(shù)據(jù)庫可以打開和讀取等,windows應(yīng)用窗體就不行了,正確配置了lib和include的路徑,報的錯莫名其妙:1 > sqlitetest1.obj : error LNK2031: 無法為 "extern "C" int __clrcall sqlite3_close(struct sqlite3 *)" (?sqlite3_close@@$$J0YMHPAUsqlite3@@@Z) 生成 p/invoke;元數(shù)據(jù)中缺少調(diào)用約定1 > sqlitetest1.obj : error LNK2031: 無法為 "extern "C" void __clrcall sqlite3_free_table(c-ar * *)" (?sqlite3_free_table@@$$J0YMXPAPAD@Z) 生成 p/invoke;元數(shù)據(jù)中缺少調(diào)用約定1 > sqlitetest1.obj : error LNK2031: 無法為 "extern "C" int __clrcall sqlite3_get_table(struct sqlite3 *,c-ar const *,c-ar * * *,int *,int *,c-ar * *)" (?sqlite3_get_table@@$$J0YMHPAUsqlite3@@PBDPAPAPADPAH-APAD@Z) 生成 p/invoke;元數(shù)據(jù)中缺少調(diào)用約定1 > sqlitetest1.obj : error LNK2031: 無法為 "extern "C" int __clrcall sqlite3_open(c-ar const *,struct sqlite3 * *)" (?sqlite3_open@@$$J0YMHPBDPAPAUsqlite3@@@Z) 生成 p/invoke;元數(shù)據(jù)中缺少調(diào)用約定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),該標記在函數(shù) "bool __clrcall searc-_string_wit-_sql(c-ar *,int)" (?searc-_string_wit-_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2028: 無法解析的標記(0A00001D) "extern "C" void __clrcall sqlite3_free_table(c-ar * *)" (?sqlite3_free_table@@$$J0YMXPAPAD@Z),該標記在函數(shù) "bool __clrcall searc-_string_wit-_sql(c-ar *,int)" (?searc-_string_wit-_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2028: 無法解析的標記(0A00001E) "extern "C" int __clrcall sqlite3_get_table(struct sqlite3 *,c-ar const *,c-ar * * *,int *,int *,c-ar * *)" (?sqlite3_get_table@@$$J0YMHPAUsqlite3@@PBDPAPAPADPAH-APAD@Z),該標記在函數(shù) "bool __clrcall searc-_string_wit-_sql(c-ar *,int)" (?searc-_string_wit-_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2028: 無法解析的標記(0A00001F) "extern "C" int __clrcall sqlite3_open(c-ar const *,struct sqlite3 * *)" (?sqlite3_open@@$$J0YMHPBDPAPAUsqlite3@@@Z),該標記在函數(shù) "bool __clrcall searc-_string_wit-_sql(c-ar *,int)" (?searc-_string_wit-_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2019: 無法解析的外部符號 "extern "C" int __clrcall sqlite3_close(struct sqlite3 *)" (?sqlite3_close@@$$J0YMHPAUsqlite3@@@Z),該符號在函數(shù) "bool __clrcall searc-_string_wit-_sql(c-ar *,int)" (?searc-_string_wit-_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2019: 無法解析的外部符號 "extern "C" void __clrcall sqlite3_free_table(c-ar * *)" (?sqlite3_free_table@@$$J0YMXPAPAD@Z),該符號在函數(shù) "bool __clrcall searc-_string_wit-_sql(c-ar *,int)" (?searc-_string_wit-_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2019: 無法解析的外部符號 "extern "C" int __clrcall sqlite3_get_table(struct sqlite3 *,c-ar const *,c-ar * * *,int *,int *,c-ar * *)" (?sqlite3_get_table@@$$J0YMHPAUsqlite3@@PBDPAPAPADPAH-APAD@Z),該符號在函數(shù) "bool __clrcall searc-_string_wit-_sql(c-ar *,int)" (?searc-_string_wit-_sql@@$$FYM_NPADH@Z) 中被引用1 > sqlitetest1.obj : error LNK2019: 無法解析的外部符號 "extern "C" int __clrcall sqlite3_open(c-ar const *,struct sqlite3 * *)" (?sqlite3_open@@$$J0YMHPBDPAPAUsqlite3@@@Z),該符號在函數(shù) "bool __clrcall searc-_string_wit-_sql(c-ar *,int)" (?searc-_string_wit-_sql@@$$FYM_NPADH@Z) 中被引用1 > D:\work\sqlitetest1\Debug\sqlitetest1- : fatal error LNK1120: 8 個無法解析的外部命令1 > 1 > 生成失敗。1 個答案
答案 1:
答案調(diào)試信息很清楚了,編譯器開了clr, 默認調(diào)用約定成了_clrcall, 而實際上sqlite函數(shù)使用的是_cdecl, 調(diào)用約定不正確linker就出錯了,解決方法之一就是你在用到的sqlite3函數(shù)之前,明確是cdecl應(yīng)該就能解決。 PS:中文版的VS描述很蛋疼。。比如(windows應(yīng)用窗體,一些調(diào)試信息解釋)個人覺得還是使用英文版的好,兄弟不妨試一下。