2008-10-09 9 views
1

Я пытаюсь использовать статическую библиотеку, созданную мной в Visual C++ 2005 (неуправляемый C++). Я объявляю одну функцию «int myF (int a)»; в .h-файл, я реализую его в .cpp-файле, компилирую его - создается файл .lib.Проблема со статической библиотекой в ​​C++

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

Что не так?

спасибо.

ответ

0

Попробуйте установить дополнительные зависимости в вводе компоновщика для свойств проекта.

2

Вам необходимо также включить фактический .lib-файл в ваш второй проект (а не только путь к нему).

Для этого необходимо установить параметры компоновщика.

2

Недостаточно указать папку, в которой можно найти MyStatic.lib. Вы должны явно указать компоновщику, что Dependant.vcproj использует MyStatic.lib.

В VS2005 вы делаете это по свойствам проекта-> Linker-> Input-> Additional Dependencies. Вы также можете посыпать некоторые файлы preprosessor в файле .h, чтобы сообщить компилятору рассказать компоновщику использовать MyStatic.lib.

Edit: Магия препроцессора идет как этот

#pragma comment(lib, "MyStatic.lib") 
1

(EDIT: Это был ответ на вопрос о получении ошибки/NODEFAULTLIB в фазе связи, которая теперь была удалена ... пожимают плечами)

Вы смешиваете настройки компилятора, если вы получаете ошибку по умолчанию. Например, если вы создаете свою библиотеку при отладке и создаете свою основную версию в выпуске, вы получите эту ошибку, так как они созданы для использования разных версий CRTL. Это также может случиться, если вы используете разные настройки для связывания с C Runtime как библиотекой объектов или как DLL. (См. Параметры C/C++, раздел «Генерация кода» в разделе «Библиотека Runtime»)

Во многих проектах вы не можете многого сделать, если не можете исправить настройки библиотеки (например, сторонние библиотеки). В этих случаях вам нужно использовать переключатель/NODEFAULTLIB, который является компоновщиком в разделе «Вход», называемом «Игнорировать конкретную библиотеку».

Но поскольку вы контролируете как главную, так и библиотеку, создайте отладочную версию и версию выпуска вашего LIB-файла или убедитесь, что настройки «C/C++; Code Generation, Runtime Library» совпадают в обоих проектах.