Почему библиотеки добавляются в командную строку компоновщика дважды? - PullRequest
0 голосов
/ 22 сентября 2009

У меня есть проект Visual C ++ 2003, который зависит от сторонней статической библиотеки. Мой Visual C ++ проект также компилируется в статическую библиотеку. Я ссылался на стороннюю библиотеку из моего проекта, отредактировав свойства проекта, добавив каталог сторонней библиотеки в каталоги дополнительных библиотек (например, ./LibDir) и имя библиотеки в дополнительные зависимости (например, 3rdParty.lib).

На моей машине это работает, как я ожидал, добавив это в командную строку компоновщика:

/LIBPATH:"LibDir" 3rdParty.lib

На компьютере моего коллеги он добавляет это в командную строку компоновщика:

/LIBPATH:"LibDir" 3rdParty.lib "LibDir\3rdParty.lib"

Это приводит к двойному связыванию сторонней библиотеки, что приводит к множеству ошибок и предупреждений.

Эта проблема не характерна для этой библиотеки - кажется, что любая сторонняя библиотека, которую мы пытаемся таким образом включить на компьютере моего коллеги, в конечном итоге будет добавлена ​​в командную строку дважды.

В чем причина различий в поведении его машины и моей?

UPDATE: Сейчас я проверил это на третьей машине, которая продемонстрировала то же поведение, что и машина моего коллеги, то есть ссылка на дополнительную зависимость приводит к тому, что она добавляется дважды в командную строку компоновщика (эта разница возникает, когда я открываю те же самые файлы проекта в каждая машина).

Единственное различие, которое я могу себе представить, между моей машиной и двумя другими, состоит в том, что я установил VC ++ 2003 на свою машину пару лет назад и на двух других машинах на этой неделе.

Кроме того, похоже, что это происходит только в том случае, если мой проект скомпилирован в библиотеку - если он скомпилирован в исполняемый файл, сторонняя библиотека добавляется в командную строку компоновщика только один раз.

Есть идеи ...?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2009

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

0 голосов
/ 22 сентября 2009

Проверьте, нет ли ненужного наследования зависимостей в проекте «Ваши друзья» в «Дополнительных каталогах».

Попробуйте исключить Ваш 3rdParty.lib, проверьте, есть ли $ (ProjDir) или аналогичные дополнительные различия в свойствах.

Не могли бы вы опубликовать свою командную строку из компилятора / компоновщика (это можно найти в свойствах).

...