問題タブ [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 - Objective-C 構造体が定義されているかどうかを確認する
私の iOS アプリケーションは、オプションの外部サードパーティ ライブラリを使用できます。
私はこの回答(弱いリンク - クラスが存在するかどうかを確認し、そのクラスを使用する)を使用して、このライブラリに固有のコードを実行する前にクラスが存在するかどうかを検出することを考えました。
しかし、この外部ライブラリは Objective-C のクラスとしてではなく、C の STRUTS および関数として記述されていることがわかりました。
C Strutまたは関数が存在するかどうかを確認できる同様の手法はありますか? または、このライブラリが実行時に存在するかどうかを確認するためのより良い代替手段はありますか?
ios - 展開ターゲットで利用できないフレームワークのみを弱いリンクにしますか?
私のアプリでは、ほとんどのフレームワークが弱リンクされています。ドキュメントを読んでいると、これらのフレームワークを弱リンクする必要はないのではないかと思います。
私のアプリの設定
私のアプリの展開ターゲットは iOS4.3 で、ベース SDK は iOS7.1 です。
私の考え
私のアプリでは、 と を使用CIImage
しUICollectionView
ます。CIImage
はCoreImage
iOS5.0以降のフレームワークなので、フレームワークをウィークリンクする必要がありますCoreImage
。UICollectionView
UIKit フレームワークでは iOS6.0 で利用できますが、UIKit は iOS4.3 で利用できるので、weak-linkUIKit
フレームワークは必要ありません。
私は正しいですか?
ios - iOS フレームワークの弱いリンク: 未定義のシンボル エラー
プロジェクトに含めるために他の開発者に配布することを提案した独自のフレームワークを構築しています。このフレームワークは、オプションで特定のフレームワーク (CoreLocation など) をリンクします。問題は、フレームワークをビルド フェーズで CoreLocation を含まない実際のスタンドアロン プロジェクトにリンクすると、このホスト プロジェクトをビルドしようとすると、「アーキテクチャの未定義シンボル」などのリンカー エラーが発生することです。
開発者に CoreLocation をプロジェクトに含めるよう強制したくないので、これを回避することは可能ですか? 実際、それが可能であることはわかっていますが、これを達成するにはどうすればよいですか?
ios - Xcode の弱いリンクされたクラス
私のプロジェクトには、iOS Xcode プロジェクトにモックアップ情報を提供する Objective-C クラスMockupModel
があり、App Store のスクリーン ショットの作成に役立ちます。
プロジェクトには 2 つのターゲットがあります。モックアップの対象にはMockupModel.m
.
メイン ターゲット (実際のアプリの場合) を含めないMockupModel.m
ようにして、誤って配送アプリにリンクされる可能性がないようにします。
ただし、ファイルの属性インスペクターを使用してプロジェクトから を除外するMockupModel.m
と、プロジェクトはリンクに失敗します。MockupModel
の機能が見つからないというエラーが表示されます。
MockupModel
リンカーが実装されていなくても心配しないように、オプションとして宣言できる方法はありますか? 実行時に、コードはNSClassFromString(@"MockupModel")
、または で利用できるかどうかを確認します[MockupModel class]
。
c++ - Visual-C++ でスタティック ライブラリ シンボルの「弱い」リンクを *防止* するにはどうすればよいですか?
私の実際のテストに関する限り、静的ライブラリ ( .lib
) をVisual-C++ の実行可能ファイルにリンクするときに、実行可能 .obj ファイルが静的ライブラリ内のシンボルと重複するシンボルを定義している場合、静的ライブラリ内のシンボルは黙って無視されます。 .
確認 (10 年 2 月 18 日 17:46 マイケル バー) :
MSVC は、シンボルが .obj ファイルと .lib で定義されている場合、警告なしに .obj ファイルのシンボルを使用するように動作していました。シンボルが複数のライブラリで定義されている状況も処理し、リストの最初に名前が付けられたライブラリのライブラリを使用することを思い出します。
しばらくこれを試したとは言えませんが、この動作が変更された場合は驚くでしょう (特に、.obj で定義されたシンボルが .lib ファイルのシンボルをオーバーライドします)。
VS 2010 RC で簡単なテストを行ったところ、説明した動作がまだ残っていることがわかりました。
( 「Windows Static Library with Default Functions」も確認のようです)
まず第一に、私が間違っていることを証明したいと思いますが、少なくとも通常の C++ 関数については、これがそうであるように思われます。
第二に、これを防ぐ方法はありますか?私は、この関数を含む静的ライブラリにバイナリリンクするときに、静的ライブラリのバージョンが実際に使用されていることを確認したいという関数を持っています。他のプロジェクトの残り物などではありません。(注: 問題の Fn はtest_suite* init_unit_test_suite(int argc, char* argv[])
, (*) であり、サードパーティのライブラリからのものであるため、実際には変更できません。)
(*):これは、私たちのカスタム静的ライブラリによって提供される Boost.Test メイン関数です。開発者が単体テスト プロジェクト (プロパティ シートを介して自動的に静的ライブラリにリンクされる) を作成するが、誤って関数も定義する場合、開発者が提供する関数を使用する代わりに、ビルドが中断する必要があります。
objective-c - リンクが弱い?外部クラス?それは可能ですか
私はその問題に数日悩まされています。
問題は、内部でココア ポッドを使用しながら SDK をビルドすることです。その結果、パブリック ヘッダーを持つクローズド ソースのファット ライブラリが作成されます。ポッドの 1 つが AFNetworking です。IMO では、次の理由により、AFNetworking (および他のポッド) を out ライブラリに含めるべきではありません。
- SDKユーザーが独自のAFNetworkingも追加する場合、衝突/重複したシンボルを持ちたくありません
- AFNetworking の更新 (セキュリティ強化のため) のためにフレームワークを更新し続けることを余儀なくされたくありません。これは、使用する他のポッドごとに乗算されます。
したがって、私たちがやりたいことは、ユーザーが独自の AFNetworking のコピーを提供するために必要な指示を含むクローズド ソース SDK を提供することです (おそらく、推奨バージョンをメモに記載してください)。それは可能ですか?