iOS静的ライブラリアーキテクチャが正しくないため、コンパイルに失敗しました

1424 ワード

1.問題が発生した場合:
ld: warning: ignoring file   /Users/xxx/Library/Developer/Xcode/DerivedData/kxmovie-eilzobgtafjobffcieyxpdqrvsam/Build/Products/Debug-iphonesimulator/libNSLogger.a, file was built for archive which is not the architecture being linked (i386)

現在使用されているlibNSLoggerという意味です.aライブラリは、リンクを必要とする構造i 386に一致しない.ライブラリのスキーマを表示するには、ターミナルでコマンドを使用します.
lipo -info xxx.a   // 

調べてみろaのアーキテクチャはx 86_64.シミュレータで実行し、Build Active Architecture OnlyがNOを選択した場合、ライブラリのアーキテクチャはx 86_64 i 386のハイブリッドライブラリ:
Architectures in the fat file: /Users/xxx/Library/Developer/Xcode/DerivedData/kxmovie-eilzobgtafjobffcieyxpdqrvsam/Build/Products/Release-iphonesimulator/libPods-KxMovieExample.a are: i386 x86_64 

私のエラーはlibNSLoggerをコンパイルしています.aの時、Build Active Architecture OnlyがYESを選んだので、x 86_しか出てこなかった64ですが、アプリ自体はNO、つまりi 386が必要なので、アーキテクチャが間違っていて、上記の問題を引き起こしています.まとめると、(1)APPパッケージ自体にはBuild Settings->Architecturesで設定されたアーキテクチャ設定があります.ホスト上のコンパイルはarm 64 arm 7 sなどの設定されたアーキテクチャです.Build Active Architecture OnlyがYESに設定されている場合、iPhone 6に接続するとarm 64のみがコンパイルされます.シミュレータでコンパイルすると上のi 386 x 86_64.(2)参照する静的ライブラリにも独自のアーキテクチャがあり、APPが必要とするアーキテクチャが静的ライブラリに存在しないと、対応する関数が見つからず、エラーが報告される.アプリの引用が複雑な場合は、この点は混同しやすいです.最後に、静的ライブラリは統合でき、2つの異なるアーキテクチャの静的ライブラリを1つの静的ライブラリに合成することで、シミュレータ、ホストが1つのライブラリを使用することができ、便利になります.
lipo -create  1.a  2.a   3.a -output  .a