問題タブ [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.
objective-c - iPhone シミュレーターで実行中の UIPopoverController クラスの可用性の検出に関する問題
私は、iPad バージョンの UIPopoverController を使用するユニバーサル アプリに取り組んでいます。(ベース SDK とデプロイ ターゲットの両方が iOS 4.3 です)
iPhone シミュレーター (バージョン 4.3) を使用して iPad と iPhone の条件付きコード パスをテストすると、弱いリンクもNSClassFromString(@"UIPopoverController")
アプローチも期待どおりの動作をしません。
UIKit フレームワークの弱いリンクをテストするときは、必ず LLVM 2.1 コンパイラを使用し、UIKit フレームワークを [ターゲット] -> [ビルド フェーズ] -> [バイナリをライブラリにリンク] で [オプション] にします。(私が理解しているように、Xcode 4.1でそれを行う方法です)。
コードの実行
iPhone シミュレーターでアプリケーションがクラッシュし、[UIPopoverController class]
が返されないことが示されますnil
。上記に置き換える[UIPopoverController class]
とNSClassFromString(@"UIPopoverController")
、同じクラッシュが発生します。
シミュレーターで実行しているときにこれらの条件付きチェックを機能させる方法を知っている人はいますか?
iphone - より低いデプロイメントターゲットを設定すると、iOS5メソッドを含むコードをコンパイルできません
すべての新しいiOS5メソッドに当てはまるわけではありませんがsetBackgroundImage:forBarMetrics:
、デプロイメントターゲットが5.0未満の場合、UINavigationBarのメソッドを呼び出すと「インスタンスメソッドが見つかりません」という警告がトリガーされることがわかりました。これは、SDK5.0とリンクしているにもかかわらずです。
さらに重要なことに、パラメータとして使用される列挙型UIBarMetricsは、「宣言されていない識別子」として報告され、これによりコンパイラエラーがトリガーされます。
なぜそうなのか、何か考えはありますか?デプロイメントターゲットが5.0未満の場合、コードは機能しないことに気付きましたが、実行時にUINavigationBarがそのセレクターに応答するかどうかを確認しているので、すべて問題ないはずです。コンパイラエラーはわかりませんが。
編集:これは、デバイス用にコンパイルするとき、およびデバイスが実際に接続されているときにのみ発生します(私がテストしたデバイスはiOS 5.0.1を実行します)。
iphone - iPhone アプリ用の複数のフレームワークの弱リンク (-weak_framework)
古い展開ターゲット用に iPhone アプリをコンパイルするときに、複数のフレームワークに -weak_framework を指定するにはどうすればよいですか?
objective-c - iOSで弱いリンクのフレームワークにアクセスするには?
iOS 5 用の Twitter フレームワークを使用したいのですが、古い OS でアプリを実行できるようにしたいです。
Xcode 4.2 のターゲット設定に弱参照フレームワーク (つまり、「オプション」フラグを設定) を追加しました。ベース SDK は iOS 5、iOS 展開ターゲットは iOS 3.2 です。
次に、Twitter フレームワークを使用してみます。
iOS 5 シミュレーターで問題なく動作します。古いバージョンの OS でシミュレーターまたは実機を使用しようとすると、すぐに "Twitter/Twitter.h" ファイルが見つかりません (コンパイル時) というエラーが表示されます。「#import」ディレクティブを削除すると、TWTweetComposeViewController クラスが見つからないというエラーがいくつか発生します。
Twitter 関連のすべてのコードにコメントを付けると、次のリンカー エラーが表示されます: "ld: フレームワークが Twitter に見つかりません"。Ld コマンドでエラーが発生しました:
ここで何が問題なのですか?
objective-c - 弱くリンクされたiOSクラスまたはデプロイメントターゲットiOSバージョンにないクラスから継承
私のコードには、iOS 5以降でのみ使用可能なクラスであるUIReferenceLibraryViewController(UIKit Frameworkの一部)を継承するクラス(myRefLibと呼びます)が含まれています。iOS3.2の展開ターゲットが欲しいのですが。
UIReferenceLibraryViewControllerのインスタンスを作成したばかりの場合は、5のベースSDKを使用して、それを含むコードを実行する前に、[UIReferenceLibraryViewControllerクラス]でクラスが存在するかどうかをテストできることを理解しています。しかし、クラスから継承している場合はどうすればよいですか?
問題は、それを使用するコードの部分に継承クラスmyRefLibを#includeする必要があることですが、実行時に条件付きでそれを行う方法はありません。あるいは、myRefLibのUIReferenceLibraryViewControllerから条件付きで継承するランタイムの方法もありません。また、myRefLibのインスタンスを別のクラスのプロパティにしたいのですが、このランタイムを条件付きで実行するにはどうすればよいですか?
どんな助けでも大歓迎です...
D
c++ - 属性が弱い関数は上書きできません
関数 (割り込みハンドラ) を weak 属性で上書きしたいのですが、リンカが定義をリンクしません。コードは読みやすくするために短縮されています。
ベクトル.c
ファイル cpuexcept.cpp でデフォルト定義を再定義します
コンパイルしてダンプすると、出力 (ライブラリ lib.a) は次のようになります。
弱い属性を持つデフォルト関数は、ターゲット アプリケーションにリンクされます。cpuexcept.cpp で関数 f() を定義し、メイン関数で使用する場合、またはハンドラーの定義が他の .c モジュールにある場合、私の定義は正しくリンクされています。cygwin で arm-none-eabi-gcc 4.6.2 (YAGARTO) コンパイラを使用しています。
gcc - 弱い属性はLinuxGCCの共有ライブラリでのみ機能しますか?
私はLinuxgccの初心者です。Linuxgccのweak属性を学習するための簡単なコードを書いています。
私のサンプルコードを参照してください:
weakref.c、メインファイル。fooメソッドが定義されているかどうかに関係なくファイルが機能するようにしたい。
したがって、次のコマンドを実行してコンパイルして実行します。
そして、出力は「fooが定義されていません」です。これは私が期待したことです。
次に、新しいファイルlibfoo.cを作成しました。以下を参照してください。
私はメインファイルをlibfoo.cで動作させるために3つの方法を試みました:
- libfoo.cとweakref.cをコンパイルし、オブジェクトファイルをリンクします。
- libfoo.cを静的ライブラリとしてコンパイルし、weakref.cのオブジェクトファイルにリンクします。
- libfoo.cを共有ライブラリとしてコンパイルし、weakref.cのオブジェクトファイルにリンクします。
3番目の方法のみが機能し、次の出力が得られます。
弱い参照が共有ライブラリでのみ機能するかどうか、およびその理由を教えてください。どうもありがとう!
java - Java はこの型指定されていない汎用メソッドをどのように解決しますか?
今日、私は本当に不思議に思う関数に出くわしました。明確にするために、この単純な構造を仮定しましょう。
現在、 a を Pointer に割り当てることは絶対に有効ですが、次のDog
ように an をPointerAnimal
に割り当てることは無効です。Animal
Dog
「魔法」が発生する AnimalCage クラスを想定してみましょう。
を使用すると、次のAnimalCage
ことが可能になります。
だから私は明示的にキャストせずにこれを何でもすることができます。Erasures
これは、実行時に消去されないという仮定につながりますが、私はよく知っています。この関数のように何をキャストするかについて、少なくともインジケーターを提供する必要があると考える前に:
Java で動物を猫/犬に割り当てる方法と、キャストする動物の特殊化について本当に疑問に思っています。
objective-c - <5.0IOSで動作するようにpopoverBackgroundViewClassをリンクするのが弱い
すでにこの質問をチェックしました:UIPopoverBackgroundViewのリンクが弱く 、すでに読んでいます:http: //www.marco.org/2010/11/22/supporting-older-versions-of-ios-while-using-new-apis#fnref :1
カスタムPopoverBackgroundViewが.hで宣言され、.mファイルに実装されています。次に、1つのファイルで、このようにインスタンス化します
私はマルコが上のリンクで言うようにそれをやってみました:
しかし、4.3 ipadシミュレーターで実行すると、同じ起動エラーが発生します
私のベースSDKはIOS5.1であり、ターゲット展開も5.1です。LLVMコンパイラ4.0を使用しています。
何か案は?どうもありがとう!
c - 静的ライブラリでgccリンクを強いシンボルにして弱いシンボルを上書きするにはどうすればよいですか?
私の問題は次のように要約できます。
bar.c:
main.c:
Makefile:
出力:
したがって、bar.cが静的ライブラリlibbar.aのmain.cにリンクされているため、main.cの弱いシンボルバーがbar.cの強いシンボルによって上書きされることはありません。
gccにlibbar.aの強いシンボルを作成して、main.cの弱いシンボルを上書きするように指示するにはどうすればよいですか?