Подтвердить что ты не робот

Как связать 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"
4b9b3361

Ответ 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.