サードパーティの「C/C ++/OBJCライブラリ」のシンボルを互いに分離するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3558394

質問

2つのサードパーティライブラリ、LibaとLibbを組み込む必要があるプロジェクトがあります。サードパーティライブラリに対する影響はほとんどありません。問題は、LibaとLibbの両方に、共通のライブラリのさまざまなバージョンであるAsihttpRequestが含まれていることです。その結果、次のようなエラーが発生しています。

-[ASIFormDataRequest setNumberOfTimesToRetryOnTimeout:]: unrecognized selector sent to instance 0x3b4170

, 、これは、LibaがLibbのAsihttprequestの実装(またはその逆)を指しているためです。

遊んでみました strip -s <symbol file> -u <library> ライブラリのシンボルを互いに分離するためには、Xcodeのリンカーが何千もの警告を吐き出し、実際には上記の主な問題を修正しません。

ld: warning: can't add line info to anonymous symbol anon-func-0x0 from ...

一般に、ライブラリを互いに隔離するにはどうすればよいですか?

役に立ちましたか?

解決

そうする方法はまったくありません。 1つのObjective-Cアプリケーションは、一度に1つのシンボルに対して1つの意味を持つことができます。 1つのライブラリの2つの異なるバージョンをロードすると、最後のバージョンが最初のバージョンを上書きします。

2つの回避策:

  1. 開発者に最近のバージョンを使用するよう説得します
  2. 別々のプロセスで両方のライブラリを実行します

他のヒント

異なるルーチンに同じリンカー記号名を使用した場合、アウトの唯一の方法(オブジェクトファイルのハッキング以外)は、何らかの形で異なる実行可能ファイルにリンクすることです。

動的リンク(例:DLL)をサポートするプラットフォームでは、一方または両方を別のDLLに組み込むことができます。それらがエクスポートされたインターフェイスの一部でない場合、シンボルは衝突してはなりません。

それ以外の場合は、それらを完全に個別のプロセスに入れ、IPCを使用してデータを渡すためにそれらを使用してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top