問題タブ [weak-linking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2323 参照

c - 弱いリンクはどのくらいポータブルですか?#pragma weak my_symbol

弱いリンクはどのくらいポータブルですか?

私はその質問を見ます: how-to-make-weak-linking-work-with-gccはそれを機能させる方法を議論します。しかし、gccが不要になるようにこれを行う良い方法はありますか?

弱いリンクと#ifdefによる宣言の保護の違いは何ですか?

0 投票する
6 に答える
21861 参照

c++ - Visual StudioでのGCCスタイルの弱いリンク?

GCCには、を介してシンボルリンクを弱くする機能があり__attribute__((weak))ます。ユーザーがアプリケーションでオーバーライドできる静的ライブラリの弱い記号を使用したいと思います。GCCスタイルの弱いシンボルでそれが可能になりますが、VisualStudioで実行できるかどうかはわかりません。

Visual Studioは同様の機能を提供しますか?

0 投票する
1 に答える
637 参照

iphone - iPhone で StoreKit フレームワークを弱リンクする際のエラー

アプリにアプリ内購入のサポートを追加しようとしています。アプリで OS2.2.1 を引き続きサポートできるようにしたいのですが、OS バージョンが 3.0 以降でないと IAP を使用できません。

StoreKit フレームワークの弱いリンクを試みました。基本的に、StoreKit.framework をフレームワークに追加しましたが、ターゲットの Link Binary With Libraries には追加しませんでした。また、Apple の指示に従って、weak_framework -StoreKite を他のフラグ行に追加しました。OS2.2.1 でアプリを実行すると、main 関数が実行される前に _read_images でクラッシュします。私は本当に 2.2.1 をサポートする必要があり、他のアプリがサポートしていることを知っています。助けてくれてありがとう。

0 投票する
1 に答える
1596 参照

cocoa - XCode フレームワークの弱いリンクの問題を回避するには?

私は、Mac OS X 10.6 のみのテクノロジーを利用するアプリケーションを構築していますが、10.5 Leopard との下位互換性を犠牲にすることはありません。

これを行う方法は、10.6 SDK をベース SDK として設定し、すべてのフレームワークを弱リンクし、次の説明に従って展開ターゲットを 10.5 に設定することです。

http://developer.apple.com/mac/library/DOCUMENTATION/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html

これは正常に機能します。Snow Leopard 専用の呼び出しを行う前に、セレクターまたはクラスが実際に存在することを確認する必要があります。または、電話をかける前に OS のバージョンを確認することもできます。

問題は、これが信じられないほど壊れやすいことです。10.6 で 1 回の呼び出しを行うと、Leopard との互換性が失われます。そのため、通常のコード コード補完機能を使用しても危険な場合があります。

私の質問: リリース ビルドを行う前に、どの呼び出しが 10.5 で定義されていないかを確認する方法はありますか? ある種の静的分析、または単なるトリック (ターゲットが他の SDK を設定しますか?) でさえ可能です。

何かをリリースする前に、Leopard マシンでテストする必要があるのは明らかですが、それでも、すべてのリリースの前にプログラムのすべてのパスをたどることはできません。

アドバイスをいただければ幸いです。

よろしくお願いします、

フランク

0 投票する
2 に答える
5887 参照

iphone - ウィークリンク フレームワーク

adMob パッケージの最後のリリースのため、MessageUI フレームワークをプロジェクトに追加しました。アプリケーションを 2.x OS デバイスにデプロイしたいので、アドバイスどおりに弱いリンクの MessageUI を使用しています。

iPhone デバイス 3.0 用にビルドすると、問題なく動作します。

iPhone デバイス 2.2.1 用にビルドすると、「ld: Framework not found MessageUI」というリンク エラーが発生します。

どこが間違っているのでしょうか?

0 投票する
1 に答える
3889 参照

c - 静的ライブラリとの弱いリンク

.c ファイルで GCC の弱い属性を持つ外部関数を宣言しました。

コンパイルされたオブジェクト ファイルには、weak シンボルとして定義された weakFunction があります。nm の出力:

次のように弱い定義関数を呼び出しています。

オブジェクトファイルをパラメーターとして GCC ( gcc main.o weakf.o -o main.exe) に定義してプログラムをリンクすると、弱いシンボルが正常に動作します。weakf.o をリンクから除外すると、main.c の関数アドレスが NULL になり、関数は呼び出されません。

問題は、weakf.o が静的ライブラリ内にある場合、何らかの理由でリンカが関数を見つけられず、関数アドレスが常に NULL になることです。静的ライブラリは ar で作成されます:ar rcs weaklibrary weakf.o

誰かが同様の問題を抱えていましたか?

0 投票する
2 に答える
3753 参照

iphone - iPhoneの弱いリンクが機能しない

私は主に3.0をターゲットにしているiPhoneアプリを持っていますが、新しいAPIが利用可能になったときにそれを利用します。コードは次のようになります。

さて、Appleがこれまでに言ったことすべてによれば、関連するAPIが弱くリンクされている場合、動的リンカーはに評価されるため、これは正常に機能UIApplicationDidEnterBackgroundNotificationNULLます。そうでないことを除いて。アプリケーションはコンパイルされますが、ヒットするとすぐに。if (UIApplicationDidEnterBackgroundNotification != NULL)でクラッシュしEXC_BAD_ACCESSます。

これは単に、設定する必要のあるコンパイラフラグの問題ですか?それとも私はこれを間違った方法で行っていますか?

0 投票する
1 に答える
539 参照

cocoa - 「DeploymentTarget」とCocoaTouchのウィークリンクでメソッドの名前を変更

iPhone SDK 3.2では、[CLLocation getDistanceFrom:]名前がに変更されました[CLLocation distanceFromLocation:]。私のプロジェクトは、ベースSDKとして3.2を使用し、3.0の「デプロイターゲット」を使用してコンパイルされています。つまり、3.2でのみ使用可能なフレームワークは弱くリンクされているため、アプリは3.0でも実行できます。

新しい名前を使用するように呼び出しを変更すると、distanceFromLocation:3.0または3.1を実行しているデバイスで何が起こりますか?メソッド呼び出しは失敗して返されると思い0.0ます(Cocoaは認識されないセレクターのデフォルトを返すため)。

私の仮定が正しければ、これは、3.0をターゲットにしなくなるまで、今のところコンパイラの警告に耐えなければならないことを意味します。

0 投票する
1 に答える
2649 参照

ios - iPhone SDKのウィークリンクに代わるものはありますか?

私のアプリを古いバージョンのiPhoneOSと互換性のあるものにしたいと思っています。オプションとして弱いリンクが言及されているのを見ました。OSバージョン検出コードを使用して、OSが処理できないコードブロックを回避できますか?(iADと言いますか?)

はいの場合、代わりに何が行われif(OS >= 4.0)ますか?

0 投票する
2 に答える
33626 参照

ios - 弱いリンク - クラスが存在するかどうかを確認し、そのクラスを使用します

ユニバーサル iPhone アプリを作成しようとしていますが、SDK の新しいバージョンでのみ定義されたクラスを使用しています。フレームワークは古いシステムに存在しますが、フレームワークで定義されたクラスは存在しません。

ある種の弱いリンクを使用したいことはわかっていますが、関数の存在のランタイムチェックについて話しているドキュメントを見つけることができます-クラスが存在することを確認するにはどうすればよいですか?