Как компоновщик решает неоднозначности при компоновке * .libs? - PullRequest
0 голосов
/ 12 августа 2011

после очень долгого времени, проведенного с неразрешенными внешними данными, я обнаружил, что VS2010 связывал неправильный файл .lib.

Файлы, к сожалению, были названы с тем же именем.

В свойствах проекта установлена ​​папка со связанной (нежелательной) библиотекой Папка с несвязанной (разыскиваемой) библиотекой была унаследована от другого листа свойств

Желаемая библиотека была более новой даты, нежелательная была очень старше.

Линкер выбрал нежелательный (как указано выше).

Каковы правила соединения библиотек? Разве компоновщик не должен хотя бы предупреждать о какой-то двусмысленности?

редактирование: Символ определяется ТОЛЬКО в НОВОЙ библиотеке. И НОВЫЙ lib ищется только когда я удаляю OLD lib (настройки компоновщика не изменились)

1 Ответ

0 голосов
/ 13 августа 2011

Думайте о LIB для Linker как заголовок для компилятора. LIB имеет только подпись экспортируемых символов, если это не статическая LIB. К файлам LIB не прикреплена версия .

Два файла LIB могут иметь одно и то же имя, что и два заголовочных файла. Это вы, программист, должны использовать правильный LIB / заголовочный файл. Если компоновщик не найдет все символы или символы будут неправильными, он сообщит об ошибке (как это сделает компилятор для несовместимых символов в заголовочном файле).

...