0

一部のコードを10.6以下でコンパイルしたいのですが、10.7以上ではコンパイルしません。

例えば:

#ifdef current version is MAC_OS_X_VERSION_10_6 or below

// do this

elif current version is MAC_OS_X_VERSION_10_7 or above 

//do that

#endif

誰かが私がそれのために適切なマクロを作るのを手伝ってくれる?AvailabilityMacros.hを調べましたが、適切なifdefを見つけることができませんでした。

ダイナミックライブラリがあり、10.7以降ではロードできませんが、10.6では正しくロードされます。これはプライベートシンボルによるもの_CGContextAppendPathです。10.6以下で使い続けたいのですが、10.7以下では使わないようにしています。これは_CGContextAppendPath、10.7以降ではシンボルが存在しないためです。

使った、

SInt32 version = 0;
Gestalt( gestaltSystemVersion, &version );

bool lionabove = ( version >= 0x1070 );

動作しませんでした。

4

2 に答える 2

2

Objective Cの場合、頼りになるルートは、たとえばを介して特定のAPIの可用性を確認すること[object respondsToSelector:]です。

使用しているCライブラリの場合、CoreGraphics.framework(一部の関数が存在しない場合でもロードが失敗しないように)に弱リンクし、を介して問題の関数の可用性を確認します&_CGContextAppendPath != NULL

詳細については、http: //developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Configure/configuring.html#//apple_ref/doc/uid/10000163i-CH1-107837およびhttp://developerを参照してください。 .apple.com / library / mac /#documentation / DeveloperTools / Conceptual / cross_development / Using / using.html#// apple_ref / doc / uid/20002000-1114537-BABHHJBC

于 2012-09-25T09:00:40.597 に答える
1

Availability.hAppleは、 iOSおよびMac OS 10.6以降用の新しいマクロファイルを導入しました(にあります<SDK>/usr/include/Availability.h)。あなたはこのようにあなたが求めていることをすることができます:

#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1070
    // code to run up through 10.6
#else
    // code to run on 10.7 or higher
#endif

このマクロも使用可能であることに注意してください(ロジックによってはこれが望ましい場合があります)。

#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
    // code to run on 10.7 or above
#else
    // code to run below 10.7
#endif    

このためのドキュメントはここにあります:さまざまなSDKの条件付きコンパイル、特にiOSとMacOSXのコードを混合している場合は一見の価値があります。また、上記のヘッダーファイルを読むことを強くお勧めします。

于 2015-02-23T02:44:29.100 に答える