Поэтому я пытаюсь скомпилировать SQLite (с использованием другого целевого устройства, которое обычно используется), и я получаю странное предупреждение и ошибку, и я не уверен, что это значит для того, как это исправить. Вот сообщение, которое я получаю после попытки компиляции из Visual Studio:
4> Компиляция ...
4> interop.c
4> sqlite3.c (11857): ошибка C2220: предупреждение обрабатывается как ошибка - файл «объект» не создан
4> sqlite3.c (11857): предупреждение C4013: «местное время» не определено; предполагая, что extern возвращает int
4> sqlite3.c (11857): предупреждение C4047: '=': 'tm *' отличается по уровням косвенности от 'int'
4> sqlite3.c (28379): ошибка C2040: «локальное время»: «tm * (const time_t *)» отличается по уровням косвенности от «int ()»
А вот код в этих строках:
#else
{
struct tm *pTm;
sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER))
pTm = localtime(&t); //Line 11857
y.Y = pTm->tm_year + 1900;
y.M = pTm->tm_mon + 1;
y.D = pTm->tm_mday;
y.h = pTm->tm_hour;
y.m = pTm->tm_min;
y.s = pTm->tm_sec;
sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
}
#endif
И определение метода для localtime (), где он жалуется на строку 28379 и косвенное указание:
/*************************************************************************
** This section contains code for WinCE only.
*/
/*
** WindowsCE does not have a localtime() function. So create a
** substitute.
*/
struct tm *__cdecl localtime(const time_t *t)
{ // Line 28379
static struct tm y;
FILETIME uTm, lTm;
SYSTEMTIME pTm;
sqlite3_int64 t64;
t64 = *t;
t64 = (t64 + 11644473600)*10000000;
uTm.dwLowDateTime = (DWORD)(t64 & 0xFFFFFFFF);
uTm.dwHighDateTime= (DWORD)(t64 >> 32);
FileTimeToLocalFileTime(&uTm,&lTm);
FileTimeToSystemTime(&lTm,&pTm);
y.tm_year = pTm.wYear - 1900;
y.tm_mon = pTm.wMonth - 1;
y.tm_wday = pTm.wDayOfWeek;
y.tm_mday = pTm.wDay;
y.tm_hour = pTm.wHour;
y.tm_min = pTm.wMinute;
y.tm_sec = pTm.wSecond;
return &y;
}
EDIT
Вот определение структуры тоже:
struct tm {
int tm_sec; /* seconds after the minute - [0,59] */
int tm_min; /* minutes after the hour - [0,59] */
int tm_hour; /* hours since midnight - [0,23] */
int tm_mday; /* day of the month - [1,31] */
int tm_mon; /* months since January - [0,11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday - [0,6] */
int tm_yday; /* days since January 1 - [0,365] */
int tm_isdst; /* daylight savings time flag */
};
Я действительно не смог выяснить, что "tm *" отличается по уровням косвенности от значения "int" или как это исправить, я даже не совсем уверен, в чем проблема, так как это компилируется для Win32, но не для WinCE.
У кого-нибудь есть понимание предупреждения \ ошибки или как это исправить? Любая помощь с благодарностью!
Спасибо!