VS: статическая линковка std библиотеки

174
08 ноября 2017, 02:23

Скажите можно ли все библиотеки линковать динамически (то есть с ключем /MD), а стандартную библиотеку - статически (/MT)? Статическая стандартная WINDOWS библиотека назывется - LIBCPMT.LIB.

https://support.microsoft.com/uk-ua/help/154753/description-of-the-default-c-and-c-libraries-that-a-program-will-link

Answer 1

Нет. Эти ключи говорят линковщику какой рантайм использовать. Если вы будете линковать 2 библиотеки в один exe/dll файл, которые собраны с различными версиями рантайма, то линкер будет ругаться, что у вас задублированы все функции этих рантаймов. Напрмер, две версии оператора new, одна статическая, другая динамическая, какую надо линковать?

Если очень хочется, то можно к .exe файлу собраному с /MD залинковать .dll, которая собрана с /MT, т.к. за "границу" dll'ки рантайм не просочится. Но так делать опастно, т.к. может получится так, что объект создан в .exe через статический оператор new, а удален внутри .dll через динамический delete. Да там много подобных приколов.

READ ALSO
Указатель С++ и динамическая память

Указатель С++ и динамическая память

Доброго всем времени суток! Хочу уточнить, правильно ли я понимаю теориюИмеем такое:

179
Загрузчик 3d моделей. С++ OpenGL

Загрузчик 3d моделей. С++ OpenGL

Знаю есть библиотека загрузчик 3d моделей AssimpЕсть ли альтернатива

192
Компиляция проекта на C++ из заголовочного файла

Компиляция проекта на C++ из заголовочного файла

Как компилировать проект на C++, находясь в *h файле? Это жутко неудобно, сделав изменения в заголовочном файле, переключаться на какой-либо...

225
Какие три ошибки обнаружит компилятор в следующем примере? [требует правки]

Какие три ошибки обнаружит компилятор в следующем примере? [требует правки]

Нашёл одну ошибку в строке "myDogAge=4;", оставшиеся две никак не могу

185