Как связать Boost в зависимой статической библиотеке
В MS Visual С++ 2010
У меня был один проект на С++ в моем решении, который использовал boost и работал отлично.
Затем я решил преобразовать этот проект в статическую библиотеку и создать новый проект, который зависит от этой статической библиотеки.
Теперь моя преобразованная статическая библиотека строит без ошибок и предупреждений (компилятор и компоновщик)
но новый проект компилируется, но не связывается.
Я получаю:
1>LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc100-mt-1_45.lib'
В качестве теста я добавил полный путь каталога к параметрам компоновщика для этой библиотеки... и затем он пожаловался на
1>LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc100-mt-1_45.lib'
Теперь я добавил полные пути ко всем библиотекам, и теперь он строит и запускает.
Я не доволен этим решением, потому что:
- Я не хочу, чтобы пользователи библиотеки
должны беспокоиться о
увеличение.
- Это грязно.
Я знаю, что ответ будет заключаться в создании DLL, но есть ли способ сделать это статически и сохранить связь на моем статическом уровне библиотеки.
Edit:
Если я скажу, что .exe-компоновщик явно игнорирует boost файлы boost, тогда все в порядке, за исключением того, что .exe не должно беспокоиться о повышении.
/NODEFAULTLIB:"libboost_thread-vc100-mt-1_45.lib" /NODEFAULTLIB:"libboost_date_time-vc100-mt-1_45.lib"
Ответы
Ответ 1
По-видимому, вам не нужны .libs, так как ваш exe также связывается без них. Кажется, вы используете методы и классы только для заголовков. Поэтому просто сообщите boost, чтобы отключить автоматическую привязку, указав в своем проекте символ препроцессора BOOST_ALL_NO_LIB.
Если вы хотите сделать свой .lib ненужным большим, включив все импульсы, этот вопрос, кажется, содержит ответ (который я никогда не пробовал сам): Связывание статических библиотек с другими статические библиотеки
Ответ 2
При создании вашей библиотеки вы можете включать в себя библиотеки boost. Для этого на странице свойств VisualStudio Librarian > General
перечислите свои библиотеки ускорения как Additional Dependencies
.
Однако может возникнуть проблема, если ваши клиенты используют boost самостоятельно и статически ссылаются на него (особенно на другую версию, чем та, которую вы используете).
Ответ 3
Вы построили библиотеку boost? В Boost есть определенные библиотеки, которые необходимо скомпилировать. Если вы этого не сделали, обратитесь к разделу "" Начало работы в Windows" о том, как создать библиотеку Boost.
EDIT-1: Boost может быть создан как как статическая, так и динамически загружаемая (DLL) библиотеки.
EDIT-2: Если вы уже создали Boost, тогда ответ @Daniel Gehriger расскажет вам, как добавить его в VS.