День добрый!
Подскажите, плз, в какую сторону копать с такой проблемой: библиотеки boost (версия 1.6.0) собираются штатными средствами (bootstrap.bat + b2.exe) с ключом --layout=tagged (чтобы не захламлять имена библиотек версией компилятора и версией boost'а). Все пересобирается (платформа х64), на выходе имена соответствуют запрашиваемым (libboost_locale-mt-gd.lib и т.п.).
Но при сборке своего проекта на линковке лезет ошибка
fatal error LNK1104: cannot open file 'libboost_locale-vc100-mt-gd-1_60.lib'
Если переименовать libboost_locale-mt-gd.lib в libboost_locale-vc100-mt-gd-1_60.lib, появится сообщение о ненайденной libboost_iostreams-vc100-mt-gd-1_60.lib.
Где и что нужно "доработать напильником" ?
Или при использовании "коротких" имен библиотек нужно в своём проекте вручную добавлять дефайн BOOST_AUTO_LINK_TAGGED ?
Здравствуйте, Vaynamond, Вы писали:
V>Но при сборке своего проекта на линковке лезет ошибка V>fatal error LNK1104: cannot open file 'libboost_locale-vc100-mt-gd-1_60.lib'
V>Где и что нужно "доработать напильником" ?
Скорее всего "доработать напильником" надо настройки своего проекта. V>Или при использовании "коротких" имен библиотек нужно в своём проекте вручную добавлять дефайн BOOST_AUTO_LINK_TAGGED ?
Если у вас VisualStudio, то в ней (в свойствах проекта) указываются имена библиотек для линковки.
Здравствуйте, Ops, Вы писали:
Ops>Здравствуйте, B0FEE664, Вы писали:
BFE>>Если у вас VisualStudio, то в ней (в свойствах проекта) указываются имена библиотек для линковки.
Ops>Там все через через дефайны для config/auto_link.hpp делается
Ops>В нем уже #pragma comment(lib, ...
Ops>Конкретно здесь стоит попробовать BOOST_AUTO_LINK_TAGGED определить.
Вот как раз этот вариант и проверяю...
P.S.: Проверил, помогло.
Здравствуйте, Vaynamond, Вы писали:
V>Или при использовании "коротких" имен библиотек нужно в своём проекте вручную добавлять дефайн BOOST_AUTO_LINK_TAGGED ?
Нужно, конечно. Откуда еще компилятору знать, какие сгенерированы имена у библиотек?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, Ops, Вы писали:
Ops>Здравствуйте, Vaynamond, Вы писали:
V>>Или при использовании "коротких" имен библиотек нужно в своём проекте вручную добавлять дефайн BOOST_AUTO_LINK_TAGGED ?
Ops>Нужно, конечно. Откуда еще компилятору знать, какие сгенерированы имена у библиотек?
Компилятор, разумеется, не знает, но boost-то ведь в курсе, в каком режиме его собирали. И библиотеки свои он сам тащит в явном виде.
Здравствуйте, Vaynamond, Вы писали:
V>Компилятор, разумеется, не знает, но boost-то ведь в курсе, в каком режиме его собирали. И библиотеки свои он сам тащит в явном виде.
А ты уверен, что твоя ошибка после переименования не из-за какого-то заголовка, который опосредованно дергает auto_link и для другой либы?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, Ops, Вы писали:
Ops>Здравствуйте, Vaynamond, Вы писали:
V>>Компилятор, разумеется, не знает, но boost-то ведь в курсе, в каком режиме его собирали. И библиотеки свои он сам тащит в явном виде.
Ops>А ты уверен, что твоя ошибка после переименования не из-за какого-то заголовка, который опосредованно дергает auto_link и для другой либы?
При сборке самих библиотек boost'а с опцией --layout=tagged и добавлением в свой проект дефайна BOOST_AUTO_LINK_TAGGED никаких ошибок не возникло. Вручную в проект библиотеки boost'а в явном виде не добавлялись.
Уточнение: в проект приходится руками добавлять библиотеку libboost_system-mt-gd.lib. Без нее лезут ошибки вида:
libboost_locale-mt-gd.lib(localization_backend.obj) : error LNK2019: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAAEBVerror_category@12@XZ) referenced in function "public: __cdecl boost::thread_exception::thread_exception(int,char const *)" (??0thread_exception@boost@@QEAA@HPEBD@Z)
и т.п.