問題タブ [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 - NSObject に特定のプロパティがあるかどうかを調べるにはどうすればよいでしょうか?
Apple API バージョン 1.0 で、「color」プロパティを持つクラス NSFoo があるとします。API 1.1 はプロパティ「サイズ」を追加します。
getter: myFoo.size を使用できるかどうかを知りたい
[myFoo RespondsToSelector:@selector(getSize)] が期待どおりに機能しません。
オブジェクトにプロパティがあるかどうかを確認する正しい方法は何ですか? ありがとう!
c - C で外部定義された識別子の存在を確認する
iOS 用の Objective-C で開発しているときにこの問題に遭遇しましたが、これは Mac OS X/iOS リンカーを使用するすべての C/C++/Objective-C コードに当てはまるはずです。解決策は別の質問でカバーされていますが、私はその理由に興味があります。
定数を定義するライブラリへのリンクを使用しているとしましょう。ヘッダー ファイルには、次のような宣言があります。
アプリケーションをコンパイルして、その定数が定義されていない以前のバージョンのライブラリを使用してシステムで実行したいので、安全のために定義されているとは想定していません。
ライブラリの最新バージョンでのみ定義されている関数がある場合は、次のようにします。
関数コードのアドレスを含む代わりに、BrandNewFunc
NULL に評価されます。定数は同じように動作すると思いますが、同じパターンを試すと、チェックの実行中にアプリが停止します (iOS では EXC_BAD_ACCESS がスローされます)。具体的には:
代わりに機能するのは、識別子のアドレスをチェックすることです:
ロジックはわかりますBrandNewIdentifier
。値がないため、アクセスは失敗するはずです。しかし、なぜその構文は次の場合に機能するのBrandNewFunc
でしょうか? そのアドレスも確認する必要があるのではないでしょうか? それとも、実際には一貫しており、見落としているものがありますか?
gcc - 動的ライブラリからの関数のオーバーライド
こんにちは、実行時にカスタマイズしたいグローバル関数を持つプログラムがあります。たとえば、関数 foo() には多くのバージョンが共有ライブラリに散らばっています。ここで、実行時に検出されたシステム構成に基づいて、適切なライブラリの関数を使用したいと思います。
ファイル loader.cpp:
ファイル other.cpp:
プログラムをコンパイルします
ただし、弱いシンボルはオーバーライドされません。ヒントはありますか?
macos - ランタイムAPIの可用性チェック(弱いリンク)-10.5での誤った動作
アプリケーションを10.6でビルドしていますが、デプロイの対象は10.5です。プログラムが10.6で実行されるときに、Service Management SMJobBless APIを利用したいのですが、10.5で実行する場合は、特権インストーラーツールを使用する必要があります。
実行可能ターゲットのサービス管理フレームワークに弱くリンクしています。私はコードのいくつかのバリエーションを試しました:
また、似たような質問にリストされているコンパイラフラグを使用してみました。
10.6では、printf("%p %d", SMJobBless, SMJobBless != NULL)
(正しく)SMJobBlessの場合はnull以外のポインター値を出力し、null以外の場合は1を出力します。
アプリバンドルを10.5にコピーするとprintf
、SMJobBlessは0x0であると表示されますが、(誤って)null以外のポインターに対して1が出力されます。
私がそれを機能させる唯一の方法は、すべての最適化をオフにして、関数ポインターを変数に割り当てることです。
しかし、本番コードの最適化をオフにすることはできません。
iphone - 弱いリンク基盤とUIKit?
最近、AirPrint 経由の印刷を導入しましたが、4.2 より前のバージョンのサポートを中止したくありませんでした (明らかに)。以前は Game Center などでそれを行っていました。このケースで特に奇妙に感じたのは、UIKit を弱いリンクにする必要があったことです。印刷は独自のフレームワークに含まれていなかったので、より詳細に行うことができました。
これは私の問題を解決し、アプリをすべてのバージョンで適切に実行できるようにしますが、正しくないと感じました.
Apple の SDK Compatibility Guideには、次のように記載されています。
デプロイ ターゲットで利用可能なフレームワークを使用する場合は、そのフレームワークを必須にする必要があります (弱いリンクはしないでください)。
、などのクラスではなく、UIKitが利用可能です。UIPrintInfo
UIPrintInteractionController
そのようなコアフレームワークを弱くリンクするのは奇妙に思えるというのは正しいですか? より良い方法はありますか?
objective-c - dlsym() から値を返す関数?
私が確信している愚かな質問は、正しくない構文です。値を返す関数で dlsym を動作させるにはどうすればよいですか? 次のコードで「無効な void* から LSError (*)() への変換」というエラーが表示されます。Linux の lightscribe サンプル プログラムをコンパイルして、OSX の dylib にリンクできることを期待しています (なぜ勝ったのか)。 'HP は実際の Cocoa SDK をリリースしていませんか? LS が登場してからわずか 6 年か 7 年ですか?):
gcc - 弱いシンボルを使用するときに GLIBC_X.Y への依存を回避するにはどうすればよいですか
Hurd でシグナルの実装に取り組んでいるときに、次の問題に遭遇しました。
基本的に、libpthread で使用される新しい関数を glibc に追加します (これらは Hurd の別のソースからのものです)。新しい libpthread が古い glibc でも動作するように、新しい関数を libpthread コードで弱いシンボルとして宣言します。(こちらのパッチを参照してください。)
libpthread が古い glibc でビルドされている場合、すべてがインデントどおりに機能します。ただし、ビルド時にシンボルが実際に glibc で見つかった場合、リンカーは新しいシンボルのバージョンに対応する「VERNEED」を発行し、古い glibc で実行すると次のようになります。
ここで、GLIBC_X.Y は新しく導入されたシンボルのバージョンです。
私が探している結果は、新しいシンボルが glibc にないときに NULL になることです。これは、古い glibc で libpthread をビルドしたときに起こることです。
これを修正する方法はありますか?libpthread をリンクするときにシンボルのバージョン管理を禁止できますか?
objective-c - Xcode 4 でフレームワークを弱いリンクにするにはどうすればよいですか?
一部のフレームワークをターゲットと弱リンクする必要があります。
しかし、私はそれを行う方法を見つけることができません...
3.2 iPad シミュレーターでプロジェクトを実行しようとすると、次のエラーが発生します。
ありがとう !
ios - 印刷用の弱いリンク フレームワーク
メールと印刷ルーチンを使用する単純なプロジェクトがあります。印刷用に、UIPrintPageRenderer のサブクラスがあります。弱くリンクされたクラスを使用するための Apple のガイドラインに従っています。
問題
アプリケーションの起動時にまだエラーが発生します:
iPad 3.2 Simulator 用のアプリケーションを実行しようとすると、これが発生します。理由はありますか?
ps コードは iPad 4.2 および 4.3 で動作します。
iphone - アプリ内のすべてのフレームワークを弱リンクするとどうなりますか?
アプリ内のすべてのフレームワークを弱リンクするとどうなりますか? 何か悪いことが起こりますか?