Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Проблема с подключением созданного .LIB-файла


Автор: avn 29.9.2010, 15:47
Доброго времени суток!

Имеется такая проблема в Visual Studio 9.

Я для своих нужд разработал множество библиотек. Создается файл ALibrary-debug.lib для отладочной версии и ALibrary-release.lib для финальной в директории (допустим) C:\###\ALibrary\Export\Lib .

Поскольку эта библиотека у меня используется активно в целой куче проектов, я ее определяю в два этапа:

1) создаю переменную среды ALIBRARY_LIB, в которой хранится C:\###\ALibrary\Export\Lib

2) в Visual Studio в Tools \ Options \ Projects and Solutions \ VC++ Directories \ Library files я сверху указываю " $(ALIBRARY_LIB) "

Теперь во всех моих программах по идее оно должно подключаться автоматически. Но при линковке выдает LNK2001 и LNK2019.

Если же я в теле программы явно указываю

Код

#ifdef    _DEBUG
    #pragma comment(lib, "ALibrary-debug.lib")
#else    _DEBUG
    #pragma comment(lib, "ALibrary-release.lib")
#endif    _DEBUG


, то все линкуется без проблем.

Вопрос - где засада???

Я пробовал вместо $(ALIBRARY_LIB) указывать прямой путь - тот же результат.

Компилируется без вопросов, хотя я в теле программ использую #include <ALibrary.h> и путь к ALibrary.h указан тем же самым образом.

Все откомпилировано в одной версии Visual Studio

Автор: borisbn 29.9.2010, 17:21
в 
Цитата(avn @  29.9.2010,  15:47 Найти цитируемый пост)
Tools \ Options \ Projects and Solutions \ VC++ Directories \ Library files

ключевое слово Directories. А какой именно файл необходимо подключить в проект ты должен указывать в самом проекте или так как ты сделал ( #pragma ... ) или в свойствах проекта/Linker/Input/Additional Dependencies

Автор: avn 29.9.2010, 17:33
Цитата(borisbn @ 29.9.2010,  17:21)
А какой именно файл необходимо подключить в проект ты должен указывать в самом проекте или так как ты сделал ( #pragma ... ) или в свойствах проекта/Linker/Input/Additional Dependencies

Почему я должен указывать файл для своей библиотеки, но не должен для того же Boost? Для него достаточно прописать в свойствах среды, а не указывать каждый LIB.

В чем разница?

Добавлено через 1 минуту и 22 секунды
Цитата(borisbn @ 29.9.2010,  17:21)
ключевое слово Directories

Причем тут Directories?

Автор: borisbn 30.9.2010, 07:22
Вообще то, ты и стандартные библиотеки win32 должен указывать для линковщика. Просто за тебя это делает визард создания проекта. Загляни в свойства проекта в раздел linker, и ты увидишь там kernel32.lib, user32.lib и, скорее всего boost.lib. А о твоей библиотеке визард не знает, но ты можешь его научить: подправить шаблон нового проекта

Автор: jonie 30.9.2010, 19:06
borisbn, буст через pragma затягиватся в проект, просто это внутрях буста сделано

Автор: borisbn 30.9.2010, 19:51
jonie, а в gcc pragma работает, или там другой механизм ?

Автор: jonie 30.9.2010, 22:40
borisbn, вот ответ насчет "поддержка прагма lib": 
Цитата

Simple; you can't. GCC has no such equivalent. Specify -l as a gcc parameter, create a linker script, call ld, call 911 or whatever.

Автор: borisbn 1.10.2010, 06:46
joniesmile

Добавлено через 13 минут и 36 секунд
avnjonie своим ответом про boost подсказал тебе как в vc удобнее включать свою библиотеку - через pragma в своём h-нике 

Автор: avn 1.10.2010, 14:52
Цитата(borisbn @ 1.10.2010,  06:46)
avnjonie своим ответом про boost подсказал тебе как в vc удобнее включать свою библиотеку - через pragma в своём h-нике

И вправду!

 smile 

Поиск в нутрях BOOST-а подтвердил наличие pragm-ы.

Спасибо!

Вопрос решен

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)