Я поддерживаю старый проект и столкнулся с некоторыми ошибками компоновщика.
Сообщение об ошибке:
error LNK2019: unresolved external symbol __imp__bsearch referenced in function "bool __cdecl is_sync_host
Насколько я знаю, bsearch
Функция включена в заголовочный файл «cstdlib» или «stdlib.h», но даже если я включаю заголовок, я не могу найти «bsearch».
Я подозреваю, что это связано с тем, что этот старый проект игнорирует некоторые библиотеки из-за конфликтов символов (я также не знаю, почему они предпочитают опускать библиотеку вместо переименования функций)
Проигнорированные библиотеки: msvcrt.lib;msvcrtd.lib;libcmt.lib;libc.lib
Я пытаюсь добавить эти игнорируемые библиотеки обратно, но затем я сталкиваюсь с множеством проблем «переопределения символов», и я не думаю, что переименование этих функций является приемлемым решением.
Я нашел работу вокруг (заменить bsearch
в std::binary_search
), но я хочу знать, почему и как правильно решить эту проблему (как получается, что компилятор не может найти bsearch?). Благодарю.
error LNK2019:
Это линкер ошибка. Ваш код скомпилированный просто отлично (.c> .o), это соединение это дает вам проблемы (.o> .exe).
Проигнорированные библиотеки: «msvcrt.lib; msvcrtd.lib; libcmt.lib; libc.lib»
Это означает, что код игнорирует стандартную библиотеку C, поэтому неудивительно, что он не находит стандарт bsearch()
функция …
Вопрос в том, Зачем? Просто нет причин (о которых я мог подумать), чтобы хорошо написанный код явно игнорировал стандартную библиотеку.
Я пытаюсь добавить эти игнорируемые библиотеки обратно, но потом я сталкиваюсь с множеством проблем с переопределением символов …
Что приводит меня к выводу, что ваш код не «хорошо написано», и в этот момент очень трудно дать совет, не видя код или не говоря «бросить его, это дерьмо». 😉
Я не думаю, что переименование этих функций является приемлемым решением.
Если у вас есть функции в вашем проекте, которые названы лайк стандартные функции библиотеки, если только ваш проект является стандартная библиотека, они неправильно названы и должен быть переименованным
Но на этом этапе я бы действительно хотел бы увидеть рассматриваемый код, чтобы выяснить, что мог иметь в виду оригинальный программист …