4

iOSアプリにいくつかの機能を追加するタスクが与えられました。私はSVNのソースをチェックして、100を超える警告(argh)で迎えられました。ありがたいことに、最後の警告(argh)にたどり着きました。

Xcode警告

(ブロックアウトされたビットはクライアント名です...)。

この警告は、次のようなことを言っていると思います。「このXMLライブラリは、ビルドでリンクされているOSアーキテクチャと互換性がありません」。

次のリリースでは、iOS5とiPhone 4以降のみをサポートします(iOSの下位バージョンと古いiPhoneではサポートしません)。

では、リンクアーキテクチャを変更しますか?リンクアーキテクチャとは何ですか?アーキテクチャを変更するにはどうすればよいですか?それとも私は完全に間違った方向に進んでいますか?

私は最新のXcodeを実行していることを言及する価値があるかもしれません、私はXcodeリストからフレームワークを追加しました(ライブラリとバイナリをリンクします)。

編集

シミュレーターからビルドするときにのみメッセージが表示されます。害はありません、ただ私を巻き上げます!

前もって感謝します。

4

4 に答える 4

3

libxml2.2.dylibに対してリンクせず、代わりにlibxml2.dylibに対してリンクします。それに対してリンクすることで、アーキテクチャの正しい実装に対して常にリンクされるようになります。

原則として、アプリケーションでは、特定のバージョンではなく、ライブラリの汎用バージョンにリンクします。この場合、これはlibxml2.2ではなくlibxml2を意味します。

実行時に現在のOSバージョンとアーキテクチャの正しい実装を自動的に指すダイナミックライブラリ(へのシンボリックリンク)にリンクしています。ライブラリの特定のバージョンにリンクすることはこれを保証するものではなく、単一のアーキテクチャしかないものにリンクすることになる可能性があります。したがって、開発中にシミュレータをターゲットにするときにlibxml2.2.dylibにリンクすると、i386であるものに対してリンクしている可能性があり、デバイスをターゲットにすると、正しいアーキテクチャが見つかりません(armvWhateverにi386を使用しようとしているため) 、これはまさにあなたが言っていることです)。

于 2013-03-27T02:26:26.340 に答える
1

を使用しようとしている場合はlibxml2.2、Xcodeですでに利用可能です。外部ソースから取得する代わりに(Appleはダイナミックライブラリの使用を許可しません)、Xcodeでフレームワークに追加してから、を追加してリンクし/usr/lib/libxml2/ますHeader Search Paths。プロジェクトをAppleが提供していないdylibにリンクしないでください。リンクしないと、アプリが拒否されます。また、 iOSはデバイスの新しいバージョンのアーキテクチャとアーキテクチャをi386使用しているため、アーキテクチャはiOSのアーキテクチャではありません。そのため、アーキテクチャの警告が表示されます。armv7armv7s

于 2013-03-25T23:31:02.640 に答える
0

基本的に、libxml2.2とlibxml2の違いは、libxml2.2がlibxmlの特定のバージョン/実装を指しているのに対し、libxml2は、XCodeが検出できるlibxml2の最新バージョンと正しいアーキテクチャを指すショートカット/シンボリックリンクであるということです。したがって、このようなフレームワークを追加するときは、発生している問題が正確であるため、「特定のバージョン」(libxml2.2)ではなく、常に「一般バージョン」(シンボリックリンク)を追加する必要があります。

お役に立てれば!

于 2013-03-27T12:46:34.847 に答える
-1

つまり、armではなく386用に構築されたものにリンクしているということです。リンクするには別のdylibが必要になるか、プロジェクト設定に移動してアーチを変更する必要があります。(dylibを構築している場合)おそらくarm7などが含まれます。

于 2013-03-22T13:11:55.817 に答える