Xcode (4.5.2) でデバッグ構成を使用して正常にビルドするプロジェクトがあります。ただし、Release 構成のビルドに切り替えたので、問題が発生しています。インライン アセンブリ関数の 1 つでエラーが発生していますInvalid symbol redefinition
。そのエラーメッセージをグーグルで検索すると、そのコンパイラエラーが発生した人が何人か見つかりますが、それが何を意味するかについての情報はありません. エラー行に注釈が付けられた関数は次のとおりです。
inline int MulDivAdd(int nNumber,
int nNumerator,
int nDenominator,
int nToAdd)
{
int nRet;
__asm__ __volatile__ (
"mov %4, %%ecx \n"
"mov %1, %%eax \n"
"mull %2 \n"
"cmp $0, %%ecx \n"
"jl __sub \n"
"addl %%ecx, %%eax \n"
"adc $0, %%edx \n"
"jmp __div \n"
"__sub: \n" // "Invalid symbol redefinition"
"neg %%ecx \n"
"subl %%ecx, %%eax \n"
"sbb $0, %%edx \n"
"__div: \n" // "Invalid symbol redefinition"
"divl %3 \n"
"mov %%eax, %0 \n"
: "=m" (nRet)
: "m" (nNumber),
"m" (nNumerator),
"m" (nDenominator),
"m" (nToAdd)
: "eax", "ecx", "edx"
);
return nRet;
}
保護された名前かもしれないと思ったので、に置き換えてみまし__sub
たが、そうではありませんでした。これがリリースでのみ発生する理由がわかりません-最適化が原因でしょうか?__sbt
__sub