Сбой компилятора VS2005 C ++ с флагом / Gd - PullRequest
0 голосов
/ 01 июня 2010

Я пытался скомпилировать наш проект в Visual Studio 2010, используя компилятор 2005 года, и наткнулся на эту странную ошибку.

В этом конкретном файле происходит сбой компилятора, когда я пытаюсь скомпилировать его из VS2010 с помощью диалогового окна ошибки «Оптимизирующий компилятор Microsoft (R) C / C ++» с кнопками «не отправлять»). Я посмотрел, как VS2010 вызывает компилятор 2005 года, и заметил некоторые отличия от того, как VS2005 вызывает его. Поэтому я начал удалять эти различия по одному при попытке компиляции после каждой попытки, и как только я убрал флаг /Gd, файл успешно скомпилирован.

Глядя на документы компилятора, этот флаг управляет соглашением о вызовах и устанавливает его в __cdecl, который используется по умолчанию. Разница лишь в том, что в VS2005 он пропущен, но VS2010 решает добавить его в командную строку, что приводит к сбою.

Кто-нибудь сталкивался с этим или знает способ обойти эту проблему? Я не могу найти способ заставить VS2010 сбросить /Gd из командной строки, хотя это по умолчанию. Единственное, что я могу найти, это как добавлять параметры, а не удалять.

Спасибо.

1 Ответ

1 голос
/ 01 июня 2010

Предполагая, что у вас есть веская причина для желания использовать новую IDE с прародителем ее компилятора (мне любопытно!), Вы можете изменить соглашение о вызовах в ветви "Advanced" свойств конфигурации "C / C ++" проект.
Этот список дает мне только три значения для выбора, но когда я вручную удаляю текст, IDE вызывает компилятор без какого-либо ключа / Gx - по крайней мере, это то, что показывает ветка «Командная строка».

Это может быть хорошей идеей, чтобы свести вашу проблему к повторному делу и обратиться в службу поддержки MS, предоставив ее. Возможно, у них уже есть исправление для этой проблемы, а если нет, то оно сможет создать его за относительно короткое время. Обращение в службу поддержки из-за ошибки в их программном обеспечении раньше было бесплатным (и когда происходит сбой компилятора вместо выдачи значимого сообщения, это всегда ошибка компилятора).

...