今日の一言
2011/07/26(Tue) 別に100%ロボっ娘でもいいですよ? [長年日記] 22:00現在曇 27℃
_ [C++][Mac]Macの64bitアプリケーションがBlockMove、BlockMoveData、BlockZeroのシンボルエラーでコンパイルできない場合
参考:
http://developer.apple.com/library/mac/#documentation/Carbon/Conceptual/Carbon64BitGuide/OtherAPIChanges/OtherAPIChanges.html
以下は、32bitアプリとしてはコンパイルできるのに、64bitアプリとしてコンパイルしようとすると以下のようなエラーが出る場合の説明である。
ld: Undefined symbols: _BlockMoveData _BlockMove _BlockZero
これらの関数はCoreServices.frameworks内の「MacMemory.h」で定義されており、従来の32bitアプリケーションでは問題なく使用できる。
ただし、参考元の公式のリファレンスにもあるとおり、BlockMove、BlockMoveData、BlockZero等の関数は、64bitアプリケーションでは使用できない。
代わりにBSDの関数である「memmove」や「bzero」を使う必要がある。
なお、「BlockZero」に関しては、引数等を変えることなく、そのまま「bzero」で置換可能である。ただ、「bzero」自体もレガシーな関数のため、実際には「bzero」よりも「memset」で置き換えたほうが望ましい。
[TrackBack URL: http://akihiro-i.net/~akihiro-i/diary/tb.rb/20110726]