10 Seattleでbcc32cとCodeGuardを組み合わせるとアプリ実行時にAccessViolationが発生する

提供: Support
移動先: 案内検索

概要

C++Builder 10 Seattle からWin32ターゲットプラットホームに対して新しくClangペースのC++コンパイラがサポートされました。従来のBCCコンパイラ(bcc32)とClangコンパイラ(bcc32c)の切り替えは、C++Builderのプロジェクトオプションで行なうことができます。

Thumb03000010ujpn.png

C++Builder 10 Seattleのプロジェクトオプションのデフォルトの設定は、’従来の’のBorlandコンパイラを使用にチェックがついており、bcc32が有効になっています。そして、CodeGuardは、bcc32ではサポートされておりましたが、bcc32cではサポートされていません。

詳細につきましては、10 Seattleのリリースノートを参照ください。

現在のIDEの仕様では、Win32ターゲットプラットホームで使用するC++コンパイラの切り替えは、上述したプロジェクトオプションで行っており、切り替えたC++コンパイラのスイッチに応じてCodeGuardの有効/無効を排他的に制御は行っておりません。そのため、bcc32cとCodeGuardの組み合わせでアプリケーションを実行すると、以下のようにAccessViolationが発生いたします。

Thumb03000011ujpn.png

対処

本件の対処方法としては、bcc32cとCodeGuardの組み合わせでのご利用を避けていただくか、以下のようにCodeGear.Cpp.TargetsファイルのCodeGuardに関する設定を修正してください。

CodeGear.Cpp.Targetsファイルは、$(BDS)\binディレクトリ内に配置されており、$(BDS)のデフォルトパスは、C:\Program Files (x86)\Embarcadero\Studio\17.0 です。


CodeGear.Cpp.Targets(618行目)


(修正前)

<!-- Codeguard -->
<CodeGuard_Lib Condition="'$(BCC_AllCodeguardOptions)'=='true' and '$(Platform)'=='$(cWin32Platform)'">cg32.$(LibExt)</CodeGuard_Lib>


(修正後)

<!-- Codeguard -->
<CodeGuard_Lib Condition="'$(BCC_AllCodeguardOptions)'=='true' And '$(Platform)'=='$(cWin32Platform)' And '$(USING_CLANG)'!='true'">cg32.$(LibExt)</CodeGuard_Lib>

修正後、CodeGear.Cpp.Targetsファイルを保存してください。