Игнорировать комментарий #pragma(lib, …)?
-
21-08-2019 - |
Вопрос
Я пытаюсь выполнить ссылку на ранее созданные файлы .obj (используя последнюю версию MSVC).
Когда эти .obj были созданы, в исходном коде было указано:
#pragma comment(lib, ...)
Таким образом, компоновщик пытается связать статические библиотеки, указанные в источнике.Есть ли способ указать компоновщику игнорировать эти библиотеки, чтобы я мог указать свои собственные?
например, если часть источника сделала следующее:
#pragma comment(lib, foo.lib)
Во время компоновки я бы хотел, чтобы компоновщик игнорировал «foo.lib» и вместо этого ссылался на «bar.lib».
Решение
Почему бы не изменить источник ( #pragma
директивы)?
От comment
Страница MSDN:
библиотека
Помещает запись поиска в библиотеке в объектный файл.Этот тип комментария должен сопровождаться параметром commentstring, содержащим имя (и, возможно, путь) библиотеки, в которой компоновщик должен искать.Имя библиотеки следует за записями поиска библиотеки по умолчанию в объектном файле;компоновщик ищет эту библиотеку так же, как если бы вы назвали ее в командной строке, при условии, что библиотека не указана с помощью /nodefaultlib.Вы можете поместить несколько записей поиска в библиотеке в один и тот же исходный файл;каждая запись появляется в объектном файле в том же порядке, в котором она встречается в исходном файле.
Если порядок библиотеки по умолчанию и добавленной библиотеки важен, компиляция с ключом /Zl предотвратит размещение имени библиотеки по умолчанию в объектном модуле.Затем можно использовать вторую прагму комментария для вставки имени библиотеки по умолчанию после добавленной библиотеки.Библиотеки, перечисленные с этими прагмами, появятся в объектном модуле в том же порядке, в котором они находятся в исходном коде.
Вы также можете использовать NODEFALTLIB
опция компоновщика для остановки foo.lib
от связи и укажите bar.lib
как и другие файлы lib (т.е.через панель свойств компоновщика).
В противном случае переименуйте bar.lib
к foo.lib
(дерзкое решение).