[QUOTE]Olginoz пишет:
Пляски с бубном бывают, когда пытаешься dll-ку написанную на одном языке и собраннуюв одной системе, морально устаревшей и имеющей ошибки в компиляторе,использовать на другом языке во вполне приличной системе.[/QUOTE] А не хотите плясок с бубном в вашей любимой Visual Studio? Вы, Ольга, просто не знаете вообще, о чем говорите. Пусть одна совершенно качественная и полностью отлаженная сторонняя библиотека собрана под VC++ 2015, а ваш полностью отлаженный проект в VC++ 2017. Каждая из частей по отдельности будет работать великолепно и безо всяких багов. Но если вы их соедините вместе - с большой вероятностью (зависящей от рук архитектора) вы приплыли, потому что у вас теперь по меньшей 2 (ДВЕ) библиотеки CRT, каждая из которых ожидает, что она единственная в адресном пространстве исполняемого процесса. [QUOTE]У Вас совершенно несправедливое поверхностное суждение[/QUOTE] Нет, просто ваши ответы - на уровне Junior C/C++ developer'а. Собеседование в имеющуюся у меня в подчинении группу математиков-программистов вы бы не прошли. [QUOTE]В современной системе с управляемым кодом - один.[/QUOTE] Вы не ответили на вопрос, а ушли от него. Да, managed среды были придуманы как раз для того, чтобы насильно править [U]кривые[/U] руки. Но в вашей же любимой Visual Studio в [B]un[/B]managed C++ коде может быть сколь угодно много разных CRT, даже если используется одна и та же версия студии.
[QUOTE]Вы представляете себе, сколько бы тратилось машинного времени и людских ресурсов при многократном перекомпилировании не маленьких библиотек в виндах?[/QUOTE] Вы просто не представляете себе, о чем вообще пытаетесь рассуждать. В данном случае вы в корне неправы, и серьезные проекты (включая компоненты самой операционной системы) точно так же в Windows перекомпилируются целиком, как и в Linux. Причина одна и та же - необходимость иметь единственную CRT на весь исполняемый код. В противном случае возникает ситуация, которая называется "пересечение объектом границ CRT" (crossing CRT boundary).
Вот тут вкратце обзор данной проблемы:
[URL=http://siomsystems.com/mixing-visual-studio-versions/]Mixing Multiple Visual Studio Versions in a Program is Evil[/URL]
Так что полная пересборка кода - это отнюдь не прихоть опенсурсной среды Linux. Это прежде всего способ избежать указанной выше проблемы для сохранения целостности системы.
Если для вас это все слишком много букв, вот вкратце описание примера, влекущего за собой проблему:
[QUOTE]// Get hindcast data from our special library, observationData
// variable will keep the newly allocated memory buffer
// on success and null otherwise.
float *observationData = MyObservationLib::getHindcastData();
// Check if we've got some data and perform accordingly
if (0 != observationData)
{
// Do whatever you need and then clean up our buffer to release
// the memory previously allocated by getHindcastData function
...
free(observationData); // <-- Crash happens right here
}[/QUOTE] Если CRT одна, то код работает безо всяких проблем, поскольку здесь нет никакой ошибки (кроме проблемы дизайна). Если CRT разные, то могут случаться краши, поскольку выделение памяти происходит в одной CRT, а освобождение в другой, которая ни сном ни духом про выделенный блок памяти.