Игнорировать конкретные библиотеки для библиотек CRT? - PullRequest
3 голосов
/ 16 ноября 2011

В очень старой кодовой базе у нас есть некоторые настройки сборки для наших настроек проекта Visual C ++, которые сбивают с толку и, по-видимому, не нужны.

Наши проекты C ++ создаются с использованием Visual Studio (в настоящее время используется vs 2010) ив настройках компоновщика есть несколько библиотек, указанных для настройки компоновщика «игнорировать определенные библиотеки».Некоторые из этих библиотек: msvcirt.lib и msvcrtd.lib.

Итак, на вопрос: Не могу понять, зачем мне нужно игнорировать эти конкретные библиотеки?

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

По умолчанию при использовании VS 2010 для создания проекта C / C ++ (т.е. .vcxproj) эти библиотеки специально не игнорируются.Поэтому я на 99% уверен, что эта настройка компоновщика не нужна в 99% случаев.Кто-нибудь согласен со мной в этом?

Когда я использую средство обхода зависимостей для проверки любой старой библиотеки DLL, которую я создаю, я вижу, что, если я ссылаюсь в ADVAPI32.dll, это была зависимость от msvcrt.dll.Но это не должно быть моей заботой ...

Ответы [ 2 ]

2 голосов
/ 11 июня 2013

Становится даже хуже.Библиотеки, которые вы должны игнорировать, зависят от тех, которые вы на самом деле используете. (Если вы этого не сделаете, вы можете столкнуться с огромными проблемами, такими как повреждения кучи и т. Д.)

Итак, учитывая характеристики вашего проекта (MultiThreaded, SingleThreaded, ..) вам придется использовать определенные библиотеки времени выполнения.Посмотрите здесь , чтобы узнать, какую библиотеку времени выполнения использовать.

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

2 голосов
/ 16 ноября 2011

В некоторых библиотеках возникают конфликты, когда вы связываете несколько библиотек, которые были скомпилированы по-разному.

Я столкнулся с некоторыми проблемами, когда мне пришлось использовать это при компиляции C ++ / CLI с / clrflag.

Несколько примеров:

Сложность сборки с Visual Studio 2010

Visual Studio .NET 2003 - игнорировать определенную библиотеку для libcmtпротив libcmtd

...