Таинственный относительный путь к библиотеке - PullRequest
1 голос
/ 03 февраля 2009

После загрузки существующего приложения MFC в Visual Studio 2008 у меня осталась одна ошибка связывания:

LINK : fatal error LNK1104: cannot open file '..\..\xpressmp\lib\xprm_rt.lib'

Я посмотрел "везде", но не могу понять, где установлен относительный путь. Файл lib находится в C: \ xpressmp \ lib, и я добавил этот каталог в раздел «Сервис-Параметры-> Проекты и решения-> Каталоги VC ++-> Библиотечные файлы и Проект-> Свойства-> Компоновщик-> Дополнительно Библиотечные каталоги. Я также искал все файлы в проекте безрезультатно.

У меня есть файл библиотеки (xprm_rt.lib), указанный в разделе «Дополнительные зависимости» как для отладки, так и для выпуска. Я также попытался добавить путь там, но это не помогло. Я не могу найти никаких комментариев-директив #pragma.

О LNK1104, файл явно не существует в местоположении, которое ищет компоновщик. Но я не могу понять, почему он там ищет (..\..\ ...), поскольку я не указал относительные пути.

Любая помощь приветствуется: -)

UPDATE: В файле проекта .vcproj я нашел следующий xml:

<File RelativePath="..\..\XpressMP\lib\xprm_rt.lib"></File>
<File RelativePath="..\..\XpressMP\lib\xprs.lib"></File>

После удаления этих строк (где они были установлены?) Я смог успешно установить связь. Спасибо за вашу помощь, кажется, что относительный путь к библиотеке действительно был добавлен "автоматически" VS.

Спасибо вам обоим, я думаю, что Ник поставил меня на правильный путь.

Ответы [ 3 ]

4 голосов
/ 03 февраля 2009

В свойствах проекта найдите в разделе Свойства конфигурации -> Компоновщик -> Ввод -> Дополнительные зависимости для каждой конфигурации вашего проекта (Отладка, Выпуск и т. Д.). Также ищите директивы #pragma comment(lib, ...) в коде.

Добавив папку C:\xpressmp\lib в путь поиска библиотеки в каталогах VC ++, убедитесь, что в разделе Дополнительные зависимости указано только имя файла библиотеки, и этот путь не включает путь (т. Е. xprm_rt.lib, а не ..\..\xpressmp\lib\xprm_rt.lib).

Кроме того, пробовали ли вы каждое из решений в документации об ошибке LNK1104 ?

1 голос
/ 03 февраля 2009

Для меня это звучит как одна из нескольких возможностей:

  • Сама библиотека устанавливает путь для включения библиотеки через директиву #pragma comment (lib, ...); поиск заголовков библиотеки, чтобы увидеть, если это так
  • У вас есть проект для библиотеки, включенный в ваше решение, от которого зависит ваш основной проект, и относительный путь к библиотеке автоматически добавляется VC; проверьте страницу свойств командной строки для основного проекта, чтобы увидеть, так ли это

Это то, о чем я могу думать, что может вызвать ошибку; надеюсь, это поможет.

0 голосов
/ 03 февраля 2009

Спасибо за быстрый ответ!

У меня есть библиотечный файл (xprm_rt.lib), указанный в разделе «Дополнительные зависимости как для отладки, так и для выпуска». Я также попытался добавить путь там, но это не помогло. Я не могу найти никаких директив #pragma comment.

Что касается LNK1104, файл явно не существует в местоположении, которое ищет компоновщик. Но я не понимаю, почему он там ищет (..\..\...)

...