Я пытаюсь использовать созданную мной статическую библиотеку в Visual C++ 2005 (неуправляемый C++). Я объявляю одну функцию «int myF (int a);» в файл .h, реализую в файле .cpp, компилирую - создается файл .lib.
Я создаю новый проект (отдельное решение) на VC++ 2005 (также родном C++), добавляю пути для включаемого файла и файла lib; когда я вызываю функцию myF, компоновщик сообщает об ошибке: «ошибка LNK2019: неразрешенный внешний символ _myF, указанный в функции _main». если я создаю клиентский проект в том же решении, что и проект библиотеки, а затем добавляю ссылку на проекты библиотеки, он работает, но я не собираюсь реализовывать все подобное, а скорее добавлю внешние библиотеки в свои проекты. .
Что не так?
Спасибо.





Попробуйте установить дополнительные зависимости во входных данных компоновщика для свойств проекта.
Вам также необходимо включить фактический файл .lib во второй проект (а не только путь к нему).
Для этого в настройках компоновщика должна быть опция.
Недостаточно указать папку, в которой находится MyStatic.lib. Вы должны явно указать компоновщику, что Dependant.vcproj использует MyStatic.lib.
В VS2005 вы делаете это с помощью свойств проекта-> Linker-> Input-> Additional Dependencies. Вы также можете добавить немного препроцессора в файл .h, чтобы компилятор сказал компоновщику использовать MyStatic.lib.
Редактировать: Магия препроцессора выглядит так
#pragma comment(lib, "MyStatic.lib")
(Обновлено: это был ответ на вопрос о получении ошибки / NODEFAULTLIB в фазе ссылки, которая теперь была удалена ... пожимать плечами)
Вы смешиваете настройки компилятора, если получаете ошибку defaultlib. Например, если вы создаете свою библиотеку в отладке и строите свою основную в выпуске, вы получите эту ошибку, поскольку они созданы для использования разных версий CRTL. Это также может произойти, если вы используете разные настройки для связывания со средой выполнения C как библиотекой объектов или как DLL. (См. Параметры C / C++ в разделе «Создание кода» в разделе «Библиотека времени выполнения»)
Во многих проектах мало что можно сделать, если вы не можете исправить настройки библиотеки (например, сторонние библиотеки). В этих случаях вы должны использовать переключатель / NODEFAULTLIB, который является опцией компоновщика в разделе «Входные данные» под названием «Игнорировать конкретную библиотеку».
Но поскольку вы контролируете и основную часть, и библиотеку, создайте отладочную и выпускную версию вашего LIB-файла или убедитесь, что ваши настройки «C / C++; Генерация кода; Библиотека времени выполнения» совпадают в обоих проектах.