高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

QD 40 - qdとQDGlobalsの使用

(09-Feb-96)

Q: SCでコンパイルしたサンプルプログラムがあるのですが、このプログラムをリンクしようとすると、リンカが以下のようなエラーを返してきます。

### Link: Error: Undefined entry, name: (Error 28) "qd"
  Referenced from: main in file: :Obj 68K:FIFDECO.c.o
"qd"は、QuickDrawグローバル変数です。このグローバル変数を
QDGlobals qd;
というように宣言すると、エラーは発生しなくなります。これは、少々ややこしい現象です。というのも、このグローバルはPowerPCコードの場合にのみ宣言することになっており、68Kの場合には自動的に宣言されるはずだからです。実際、同じコードはMetrowerks Codewarriorでも、また、Symantec C++ v7.0 IDEでも正常にコンパイル、リンクされます。68Kでこのグローバルを宣言するためには、何か新しいライブラリをインクルードする必要があるのでしょうか? それとも、ヘッダファイルに何か微妙な変更が行われたのでしょうか?

A: 最近のことですが、従来形式のMacintoshランタイム・アーキテクチャ(classic Macintosh runtime architecture)用のMPWライブラリが変更されました。新しいMPWライブラリでは、他のMacintoshランタイム・アーキテクチャ(PowerPCおよびCFM-68Kランタイム・アーキテクチャ)用のライブラリと同様に、QuickDrawグローバル"qd"が皆さんのコードのグローバル領域で定義されている必要があります。MPW環境で作業しているのならば、以下のような簡単な定義がいつでも必要となります。

#if GENERATINGCFM

        QDGlobals qd;   // すべてのCFM環境で必要

#else

#ifndef SYMANTEC_C || SYMANTEC_CPLUS
#define __MPW_ONLY__
#endif

#if defined (__SC__) && defined(__MPW_ONLY__)
        QDGlobals qd;   // MPWでSCを使用する場合に必要
#endif

#undef __MPW_ONLY__

#endif

QDGlobalsと"qd"の使用法に関する詳しい情報については、 Technote 1016 - Where Has my qd gone? And How Do I Use qd and QDGlobals Correctly? をご覧ください。


[ Technical Q&A's : Graphics & Media : QuickDraw : QD40 ]