У меня есть статические или динамические библиотеки повышения? - PullRequest
11 голосов
/ 06 января 2011

Я пробежал bjam.exe --build-dir="C:\build-boost" --build-type=minimal msvc stage

и теперь у меня есть библиотеки .lib с этими заголовками, например

libboost_serialization-vc100-mt
libboost_serialization-vc100-mt-1_45
libboost_serialization-vc100-mt-gd
libboost_serialization-vc100-mt-gd-1_45

Я считаю, что это должны быть статические библиотеки для отладочной и выпускной версий. Когда я запускаю компилятор с Multi-threaded Debug (/MTd), он выдает ошибку LNK1104: cannot open file 'libboost_serialization-vc100-mt-sgd-1_45.lib' Он ищет тот с -sgd

где я иду не так?

Ответы [ 5 ]

23 голосов
/ 17 января 2013

Что-то, что немного сбивает с толку, это то, что есть два «статических» варианта для создания boost с MSVC.

B2.exe принимает параметр link=static, который говорит boost, что вы хотите статически связать IT.Если вы компилируете свой проект VC с помощью / MT или / MTd, вам также нужно будет использовать опцию runtime-link=static, чтобы сообщить boost, что вы будете статически подключаться к библиотекам времени выполнения VC.

Это второй runtime-link=static, который помещает -s в имя .lib.

Моя командная строка для создания надстройки была

b2.exe --toolset=msvc variant=release link=static threading=multi runtime-link=static stage
4 голосов
/ 07 января 2011

У вас есть динамические версии. Статические ограничены наличием "s" в имени. Убедитесь, что вы указали link=static в командной строке bjam. Если нет, вам придется пересобрать, чтобы сделать статические версии.

2 голосов
/ 31 августа 2012

вот как я это сломал

libboost_serialization-vc100-mt-sgd-1_45.lib

lib- if boost library starts with lib then its a static library , shared library do not start with lib prefix. Also static library will have a '-s' in the name.

mt- multi-threaded , obtained by specifying threading=multi when you ran bjam or b2.This is the default threading.

g- use debug libraries for building the code
d- build a debug version of your code

Таким образом, ваш компилятор ищет многопоточную статическую библиотеку отладки (mt-sgd) при запуске с / MTd (создает отладочный многопоточный исполняемый файл с использованием LIBCMTD.lib). Я думаю, по умолчанию это должен быть поиск статической библиотеки. Если вам нужна динамическая библиотека, вставьте эти строки в код или определите макрос

#define BOOST_ALL_DYN_LINK
2 голосов
/ 07 января 2011

См. Поддержка начала работы Windows Раздел 6.3 именования и Раздел 6.1 по Unix именования

Для статических библиотек должно быть как там, например -sgdдинамические библиотеки

1 голос
/ 04 февраля 2014

Пожалуйста, проверьте этот документ: http://www.boost.org/doc/libs/1_45_0/more/getting_started/windows.html#library-naming

Там вы можете найти значения всех букв и, соответственно, как вы можете увеличить ускорение ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...