Не удается скомпилировать пример ms _tzSet () - PullRequest
1 голос
/ 26 мая 2020

Я использую c ++ builder 10.2 с компилятором clang на Windows 10 pro. Может ли кто-нибудь сказать мне, почему это не компилируется?

// crt_tzset.cpp
// This program uses _tzset to set the global variables
// named _daylight, _timezone, and _tzname. Since TZ is
// not being explicitly set, it uses the system time.

#include <time.h>
#include <stdlib.h>
#include <stdio.h>

int main( void )
{
    _tzset();
    int daylight;
    _get_daylight( &daylight );
    printf( "_daylight = %d\n", daylight );
    long timezone;
    _get_timezone( &timezone );
    printf( "_timezone = %ld\n", timezone );
    size_t s;
    char tzname[100];
    _get_tzname( &s, tzname, sizeof(tzname), 0 );
    printf( "_tzname[0] = %s\n", tzname );
    exit( 0 );
}

Я получаю 3 «Неразрешенные внешние» ошибки, связанные с _get_daylight, _get_timezone и _get_tzname.

1 Ответ

2 голосов
/ 27 мая 2020

Поскольку у меня нет «c ++ builder», я попробовал это с помощью MinGW.

С помощью простой команды компиляции и связывания вроде этой:

gcc -Wall -Werror -pedantic -O2 tz.c -o tz

Я получил те же ошибки:

C:\Users\###\AppData\Local\Temp\ccI8j8Mj.o:tz.c:(.text.startup+0x1f): undefined reference to `__imp__get_daylight'
C:\Users\###\AppData\Local\Temp\ccI8j8Mj.o:tz.c:(.text.startup+0x3a): undefined reference to `__imp__get_timezone'
C:\Users\###\AppData\Local\Temp\ccI8j8Mj.o:tz.c:(.text.startup+0x61): undefined reference to `__imp__get_tzname'
collect2.exe: error: ld returned 1 exit status

Один grep обнаружил библиотеку libucrtbase.a (среди прочих), содержащую символ _get_daylight. Добавление этой библиотеки к команде:

gcc -Wall -Werror -pedantic -O2 tz.c -lucrtbase -o tz

Это дало работающую программу.

Остальные библиотеки libmsvcr*.a в разных версиях, я пробовал только одну из них. Это тоже было успешным.


Редактировать:

С не столь актуальным «лязгом» мне даже не пришлось добавлять библиотеку.

clang -Wall -Werror -pedantic -O3 tz.c -o tz-clang.exe

Это скомпилировано и скомпоновано без каких-либо ошибок и отлично работает.

(clang version 7.0.1 (tags / RELEASE_701 / final), Target: x86_64-p c - windows -мсв c)

...