Сообщение от tempora
|
Определить _DLIB_TIME_USES_64 перед включением time.h
|
Определил следующим образом:
Код:
|
#define _DLIB_TIME_USES_64 1 |
При компиляции ругается на то, что не определен тип __time64_t.
Посмотрел файл time.h, увидел:
Код:
|
#if _DLIB_TIME_ALLOW_64
typedef signed long long __time64_t;
#endif /* _DLIB_TIME_ALLOW_64 */ |
Дополнительно определил:
Код:
|
#define _DLIB_TIME_ALLOW_64 1 |
После этого компилятор стал писать:
Fatal Error[Pe035]: #error directive: ("_DLIB_TIME_ALLOW_64 requires _LONGLONG") C:\Program Files\IAR Systems\Embedded Workbench 6.0\avr\inc\dlib\c\DLib_Defaults.h 967
Посмотрел DLib_Defaults.h:
Код:
|
#if _DLIB_TIME_ALLOW_64 && !defined(_LONGLONG)
#error("_DLIB_TIME_ALLOW_64 requires _LONGLONG")
#endif |
Определил _LONGLONG:
В итоге перед time.h уже три дефайна:
Код:
|
#define _LONGLONG
#define _DLIB_TIME_USES_64 1
#define _DLIB_TIME_ALLOW_64 1 |
Как итог - линкер не видит функции __difftime64, __gmtime64, __mktime64, пример ошибки:
Error[e46]: Undefined external "__difftime64" referred in main.
Далее копаться устал... Не соображу, в чём дело?
Весь прикол ситуации в том, что в Compiler Reference указано то же самое:
By default, the library and the header redirect time_t, time etc. to the 32-bit variants. However, to explicitly redirect them to their 64-bit variants, define _DLIB_TIME_USES_64 in front of the inclusion of time.h or ctime.
И нигде в интернете ссылок на подобную ситуацию, будто никто не использовал 64-битное время.
PS: Пишу на Си (не Си++), подключаю Full DLIB.