Повысить ошибку компоновщика lib Visual C ++ - PullRequest
6 голосов
/ 26 ноября 2009

Я загрузил исходный код Launchy и пытаюсь построить его в Visual Studio 2005. Проект Launchy построен с использованием VC7, поэтому мне пришлось обновить файлы проекта до VC8, и этот процесс, похоже, прошел хорошо , Тем не менее, Launchy также использует библиотеки Boost 1.33.1, и я создал библиотеки Boost 1.41.0 (опоры для Boost для упрощения сборки более новых библиотек), поэтому я также обновил проект, чтобы указать на мою новую установку Boost libs. Теперь я получаю следующую ошибку компоновщика:

fatal error LNK1104: cannot open file 'libboost_regex-vc80-mt-sgd-1_41.lib'

Я посмотрел в каталоге Boost lib, и самое близкое совпадение, которое я смог найти, это ...

libboost_regex-vc80-mt-gd-1_41.lib

Обратите внимание на пропущенные 's'. Я не понимаю, в чем разница в библиотеках, и ищет ли Visual Studio неправильную вещь или мой процесс сборки Boost не смог собрать правильные библиотеки. Кто-нибудь может указать мне правильное направление?

В качестве эксперимента я сделал копию имеющейся у меня библиотеки регулярных выражений и переименовал ее в то, что ищет компоновщик. Это дает мне длинный список ошибок компоновщика о символах, уже определенных в msvcrtd.lib, таких как:

error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in libcmtd.lib(typinfo.obj)

Я попытаюсь собрать библиотеки Boost 1.33.1 и указать вместо этого файл проекта Launchy. Но я все еще хотел бы знать, что не так с моими библиотеками Boost 1.41.0.

Редактировать : я нашел ссылку в документах Boost на то, каковы библиотеки 's':

Используйте эту библиотеку при статическом связывании со стандартной библиотекой C ++ и библиотеками поддержки времени выполнения компилятора.

Так что, похоже, что 's' - правильные. Теперь мне просто нужно выяснить, как их построить.

Решение : мне удалось собрать недостающие надстроеки с помощью следующей командной строки.

bjam --build-type=complete msvc stage

Я запустил его после запуска файла boostrap.bat в директории, где живет boost.

Ответы [ 2 ]

10 голосов
/ 26 ноября 2009

Разница четко описана в Boost docs - «mt-sgd» означает «отладка, статически связанные библиотеки времени выполнения, многопоточные, с символами отладки». «mt-gd» - то же самое, но с использованием динамически связанных библиотек времени выполнения (то есть msvcrtd.lib вместо libcmtd.lib).

Либо измените настройки проекта, чтобы использовать динамическое связывание CRT (т. Е. / MDd вместо / MTd), либо создайте Boost, используя статическое связывание - смешивание не будет работать должным образом.

3 голосов
/ 26 ноября 2009

Какую команду вы использовали для создания наддува?попробуйте указать тип сборки = завершено.Обычно он также должен собирать библиотеки.

...