неопределенная ссылка на `uv_prepare_init' в libuv

Является ли uv_prepare_init устаревшим? В uv.h есть определение функции, но я нигде не смог найти тело функции в файле C. Однако в документации нет ключевого слова, поскольку оно устарело.

Есть ли решение заменить uv_prepare_init? Мне нужен этот дескриптор для выполнения перед опросом ввода-вывода.


person laoseu348    schedule 26.06.2017    source источник
comment
Привет и добро пожаловать в Stack Overflow. Прочтите, как создать минимальный, полный и проверяемый пример, а также найдите время, чтобы пройти его. приветственный тур, чтобы узнать, как здесь ориентироваться (а также получить свой первый значок).   -  person DarkCygnus    schedule 26.06.2017


Ответы (1)


uv_prepare_init не устарел.
См. файл loop-watcher.c для получения дополнительной информации. Он доступен как для Unix (libuv/src/unix), так и для Windows (libuv/src/win).

Так в чем магия?
Как получается, что определения нет, а функция является частью библиотеки?
Макросы. Это все. Определение есть, хотя и немного запутанное.

Существует макрос с именем UV_LOOP_WATCHER_DEFINE , часть которого следует:

#define UV_LOOP_WATCHER_DEFINE(name, type) \
    int uv_##name##_init(uv_loop_t* loop, uv_##name##_t* handle) { \
        uv__handle_init(loop, (uv_handle_t*)handle, UV_##type); \
        handle->name##_cb = NULL; \
        return 0; \
    } \

    // ... continue ...

Сразу после определения используется макрос< /а> как:

UV_LOOP_WATCHER_DEFINE(prepare, PREPARE)

Вы можете легко сделать замену для себя и обнаружить, что она на самом деле определяет uv_prepare_init.

Поэтому можно сказать, что функция является частью библиотеки, она не устарела (по крайней мере, в v1.x) и вы можете свободно использовать ее в своих целях.
Нет необходимости заменять ее в так или иначе.

person skypjack    schedule 27.06.2017