0

私のプロジェクトは XCode 4.2 です。このプロジェクトは、通常のデバッグ ビルド用にコンパイルされます。

しかし、ビルド タイプをプロファイルに変更すると (メモリ使用量をプロファイルしたい)、この Objective-C++ C++ クラスからエラーが発生します。

/Volumes/mchinen/scm/Voicer/FilterAudioMixer.mm:53: エラー: プログラム /Volumes/mchinen/scm/Voicer/FilterAudioMixer.mm 内の '@' が外れています: メンバー関数内 'void FilterAudioMixer::WriteToBuffer(SInt16*, int )': /Volumes/mchinen/scm/Voicer/FilterAudioMixer.mm:53: エラー: 'autoreleasepool' はこのスコープで宣言されていませんでした /Volumes/mchinen/scm/Voicer/FilterAudioMixer.mm:53: エラー: 予想される ;' before '{' token /Volumes/mchinen/scm/Voicer/FilterAudioMixer.mm:147: error: expected }' at入力の終わり

以下の @autoreleasepool 行は 53 行目です。

void FilterAudioMixer::WriteToBuffer(SInt16* buffer, int nb_samps)
{
   @autoreleasepool {
      //do a per element lock (todo)
      pthread_mutex_lock(&playlist_lock);
      FilterSound *snd;

      size_t count = playlist.size();
      for (size_t i = 0; i < count; i++) {
         snd = playlist[i];
         [snd writeToBuffer:buffer samples:nb_samps];
      }
      pthread_mutex_unlock(&playlist_lock);

      if (m_mute) {
         memset(buffer, 0, sizeof(SInt16) * 2 * nb_samps);
      }
   }
}

@autoreleasepool がプロファイルの下でのみ問題を引き起こしているように見えますが、それはなぜですか?

完全を期すために、ビルド結果ウィンドウのコンパイル行を次に示します。

build/Voicer-project-headers.hmap -iquote. -iquotePictures -iquoteCocoaSoundCloudUI -iquoteCocoaSoundCloudAPI -iquoteOHAttributedLabel -iquoteOAuth2Client -iquoteVoicer.xcworkspace -iquoteClasses -iquotehelp -iquoteJSONKit -iquoteShaders -iquoteaudio -iquotePictures/extremeprogrammingpics -iquotePictures/2010 -iquotePictures/Webcam -iquotePictures/2011 -iquotePictures/gui -iquoteCocoaSoundCloudUI/SoundCloud.bundle -iquoteCocoaSoundCloudUI/Sources -iquoteCocoaSoundCloudAPI/Sources "-iquoteOHAttributedLabel/AttributedLabel 例" -iquoteOHAttributedLabel/OHAttributedLabel -iquoteOAuth2Client/Sources -iquoteVoicer.

4

1 に答える 1

3

そのビルド ログの重要な部分は次のとおりです。

gcc-4.2

ビルド設定の何かが原因で、サポートされていない古い GCC 4.2 コンパイラを使用するようになってい@autoreleasepoolます。(この回答の詳細な説明。)

スキームで、「プロファイル」が使用しているビルド構成を確認してください。次に、そのビルド構成のプロジェクトとターゲットの設定を確認します。

于 2012-05-06T07:30:39.033 に答える