Почему требуется распространяемый пакет Visual C ++? - PullRequest
8 голосов
/ 03 января 2012

Если код, скомпилированный визуальным компилятором C ++, является прямым C ++, зачем вам распространяемый пакет?Это делает вашу платформу кода зависимой?Предоставляет ли использование компилятора Visual C ++ с распространяемым пакетом какое-либо преимущество по сравнению с использованием другой IDE вместе с g ++?

Ответы [ 5 ]

8 голосов
/ 03 января 2012

Код не зависит от платформы, результирующий исполняемый файл . Он связан с библиотеками MS стандартной реализацией библиотеки, которая включена в распространяемый как DLL.

IIRC должна быть опция для статического связывания всего, чтобы вам не понадобился дополнительный распространяемый файл, но полученный двоичный файл все равно будет зависеть от платформы - например, вы не можете запустить двоичный файл Windows в системе UNIX (по крайней мере, без вина).

5 голосов
/ 03 января 2012

Нет такой вещи как "Straight C ++". В коде всегда будут некоторые библиотечные функции, которые вы вызываете здесь и там, и даже если вы будете очень осторожны с этим, будут некоторые функции, которые нужно будет вызывать просто кодом, генерируемым компилятором. Например, если у вас есть следующий цикл:

for( int i = 0;  i < count;  i++ )
    array1[i] = array2[i];

Компилятор заменит его кодом, который просто копирует память. И если вы компилируете для меньшего размера вместо скорости, это будет вызов функции, очень похожей на memmove ().

Кроме того, у вас могут быть некоторые операции с плавающей запятой, для которых не существует прямых эквивалентных инструкций x86; они также будут реализованы с помощью вызовов функций. И этот список можно продолжить.

Это не делает вашу кодовую платформу зависимой, потому что на другой платформе компилятор этого плафа скомпилирует тот же ваш код, чтобы идти с любой средой выполнения C ++ для этой платформы.

К счастью, среда выполнения C ++ не обязательно должна быть отдельной сущностью от вашего приложения. Проверьте параметры компилятора и компоновщика; Вы должны быть в состоянии создать один исполняемый файл, который содержит оба. Если вы обнаружили, что g ++ не требует отдельного времени выполнения, это потому, что он делает именно это по умолчанию.

1 голос
/ 03 января 2012

Распространяемый C ++ специфичен для используемой вами IDE (я говорю «IDE», но это действительно специфично для компилятора, хотя IDE и компилятору назначаются новые версии по мере продвижения.)

Это сделано специально для этой IDE, но не для Win OS.Таким образом, он должен быть обратно совместимым (при условии, что вы не используете новые API, очевидно.) На самом деле, это сделано, чтобы он был обратно совместим (а не наоборот, как вы думаете). Это позволяет вам использовать последнюю версиюсамая лучшая версия IDE (10, 11, 12 ...) и все еще запускайте ваш код на Win2k!

Теперь, конечно, он сильно отличается от Linux, где вы все равно должны перекомпилировать каждую основную версию.Большинство систем Unix будут работать таким образом.

Я не знаю способа статической компиляции C ++, чтобы избежать этих распространяемых файлов.Это может быть возможно, хотя это, безусловно, сделает ваш .exe очень большим.

0 голосов
/ 04 декабря 2014

В свойствах вашего проекта, C / C ++, Генерация кода задает для библиотеки времени выполнения значение / MT для вашей сборки выпуска.

(Автор Mike Danes, который ответил на этот вопрос на сайте social.msdn: https://social.msdn.microsoft.com/Forums/vstudio/en-US/09afd4be-7a15-4772-98c1-a0464a96cd7f/how-to-static-linkage-in-visual-c-express-edition-2010?forum=vcgeneral&prof=required)

0 голосов
/ 25 февраля 2014

Я всегда держу копию Visual C ++ 6, установленную на виртуальной машине xp (неправильно работает в Win 6/7/8).Иногда я пишу или меня просят написать служебное приложение для выполнения чего-то быстрого и / или однократного использования, которое я собираю как один exe-файл.Мне надоело посылать простую программу, написанную с использованием только std lib, кому-то другому только для того, чтобы он сказал мне, что она не работает из-за отсутствия какого-либо dll или распространяемого пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...