Не могу найти bsearch (vc2008), даже включить заголовочный файл

Я поддерживаю старый проект и столкнулся с некоторыми ошибками компоновщика.

Сообщение об ошибке:
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?). Благодарю.

0

Решение

error LNK2019:

Это линкер ошибка. Ваш код скомпилированный просто отлично (.c> .o), это соединение это дает вам проблемы (.o> .exe).

Проигнорированные библиотеки: «msvcrt.lib; msvcrtd.lib; libcmt.lib; libc.lib»

Это означает, что код игнорирует стандартную библиотеку C, поэтому неудивительно, что он не находит стандарт bsearch() функция …

Вопрос в том, Зачем? Просто нет причин (о которых я мог подумать), чтобы хорошо написанный код явно игнорировал стандартную библиотеку.

Я пытаюсь добавить эти игнорируемые библиотеки обратно, но потом я сталкиваюсь с множеством проблем с переопределением символов …

Что приводит меня к выводу, что ваш код не «хорошо написано», и в этот момент очень трудно дать совет, не видя код или не говоря «бросить его, это дерьмо». 😉

Я не думаю, что переименование этих функций является приемлемым решением.

Если у вас есть функции в вашем проекте, которые названы лайк стандартные функции библиотеки, если только ваш проект является стандартная библиотека, они неправильно названы и должен быть переименованным

Но на этом этапе я бы действительно хотел бы увидеть рассматриваемый код, чтобы выяснить, что мог иметь в виду оригинальный программист …

1

Другие решения