Почему VisualStudio ищет этот файл lib? Ошибка LNK1104 - PullRequest
5 голосов
/ 08 ноября 2010

У нас большой проект, использующий VS2008 и boost 1_42.Я пытаюсь перейти на VS2010 и повысить 1_44.Я установил VS2010 и boost 1_44 и преобразовал проект.Сейчас я пытаюсь собрать, и все компилируется, но при компоновке происходит сбой:

LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc90-mt-1_42.lib'

Я изменил каталоги include и lib, чтобы они указывали на новые файлы boost 1_44, и у меня естьпереименован в старый каталог boost 1_42.

Почему компоновщик все еще ищет файл vc90-1_42, когда он использует только заголовки 1_44?Есть ли способ, которым я могу определить, ПОЧЕМУ компоновщик хочет этот файл?Компоновщик, очевидно, считает, что ему нужен файл, но зачем?

Я очистил проект и перестраиваю его, чтобы стереть все старые файлы сборки.

Ответы [ 4 ]

5 голосов
/ 08 ноября 2010

Я тоже столкнулся с этой проблемой пару раз. Обычно это были старые временные файлы, но, как в вашем случае, очистка не всегда выполняла свои задачи сразу. Есть ли в вашем проекте какие-либо статические библиотеки, которые могли быть собраны с 1.42?

Что-то, что вы можете попробовать, что может или не может помочь в поиске вашей проблемы: Переименуйте старый каталог Boost в его первоначальное имя

  • Очистить раствор
  • В C / C ++ -> Командная строка-> Дополнительные параметры добавить "/ showInclude"
  • Под Linker-> Командная строка-> Дополнительные параметры добавить "/ verbose: lib"
  • Перестроить все

Тогда при сборке вы сможете увидеть, в какой точке 1.42 заголовки включены и т. Д. В окне вывода. Каким-то образом это помогло мне отследить, где была проблема.

3 голосов
/ 08 ноября 2010

Наряду со сменой каталога lib вам необходимо изменить имя библиотеки boost. Вот в линкере | Раздел ввода настроек проекта.

Ваш добавленный комментарий проясняет, что зависимость от библиотеки Boost 1.42 создавалась косвенно другой библиотекой, которая не была перестроена.

Для этого у вас есть два варианта: либо добавить эту библиотеку в качестве проекта в основное решение и убедиться, что в ней достаточно информации о зависимостях, чтобы ее можно было восстановить при обновлении Boost, либо использовать /Zl переключатель компилятора при сборке библиотеки. Это говорит компилятору, что вы создаете библиотеку, поэтому вы не хотите встраивать библиотечные зависимости следующим образом.

0 голосов
/ 08 ноября 2010

Вкл. Как я могу узнать, почему компоновщик хочет этот файл?

Существуют программы, которые просматривают ваше приложение и библиотеки dll / libs и сообщают о содержании манифестов и о том, от чего зависят двоичные файлы. Затем вы можете отсканировать отчет на наличие неожиданных библиотек. Мы использовали это в основном для поиска библиотек, включая предыдущую версию среды выполнения VC.

Не пользовался тем, который у нас был около 5 лет, но теперь, если бы я только мог вспомнить название приложения!

DependancyWalker (depen.exe) позволит вам увидеть зависимости dll / exe, но не статических библиотек.

Вы можете открыть каждый двоичный файл как «файл» в MSVS и посмотреть содержимое манифеста вручную, но я представляю, что это будет немного болезненно. Я не пробовал это со статической библиотекой.

0 голосов
/ 08 ноября 2010

Boost использует команду

#pragma comment(lib)

, чтобы сообщить компоновщику о библиотеках, с которыми он должен связаться.Это не ошибка.Если Boost говорит, что вам это нужно, скорее всего, вам это нужно.

...