2017-06-26 17 views
0

のために、私はtvOSのために(それが重要だ場合は、ターゲットがフレームワークです)プロジェクトをビルドすることだし、リンカからエラーを取得:LD:tvOSのために構築したが、iOSのために構築されたオブジェクト・ファイルにリンクする、アーキテクチャarm64

LD:私はOBJECTS_FILE_DIR_normalotool -l *.oを走った.oファイルのいずれかが、実際のiOSの代わりtvOSのために構築されてい考え出しアーキテクチャarm64

ため、tvOSのために構築したが、iOSのために構築されたオブジェクト・ファイルにリンクします。

問題は、対応するソースファイル(* .mmまたは* .cpp)が存在しないことです。 <ProjectName>_lto.oと呼ばれ、ビルドログにそのファイルのコンパイラ呼び出しが表示されません。

-Xlinker -object_path_lto -Xlinker /Full/path/to/<ProjectName>.build/Debug-appletvos/tvOS.build/Objects-normal/arm64/<ProjectName>_lto.o 

LLVM_LTOビルド設定が明示的に設定されていませんが、NOがデフォルト:リンカのコマンドラインで一度だけ表示されます。 NOに明示的に設定しても効果はありません。

私はXcode 8.3.2(8E2002)を使用しています。

私の質問は:なぜこのオブジェクトファイルが作成され、間違ったターゲットプラットフォームで作成されたのですか?

答えて

0

これが私自身の質問または編集に対する回答でなければならないかどうかはわかりません。「元の質問に「LLVM_LTO=NOで_lto.oファイルが生成された理由は何ですか?他の人がこの問題をトラブルシューティングできるように助けてください。

私はプロジェクトで LTOを有効にしようと決めました。 LLVM_LTO=YES_THINは、LLVM_LTO=NOと同じように動作しました。次のような警告のLLVM_LTO=YES作られたリンカ農産物トン:

ld: warning: Linking two modules of different target triples: /path/to/one/of/3rdpary/libs/libproblematic.a(file1.o)' is 'arm64-apple-ios7.0.0' whereas 'ld-temp.o' is 'arm64-apple-tvos9.0.0' 
ld: warning: Linking two modules of different target triples: /path/to/one/of/3rdpary/libs/libproblematic.a(file2.o)' is 'arm64-apple-ios7.0.0' whereas 'ld-temp.o' is 'arm64-apple-tvos9.0.0' 

しかし、リンクが成功したいくつかの奇妙な理由で、これらすべての警告と

。興味深いのは、 otool -l libproblematic.aを実行すると、 cmd LC_VERSION_MIN_TVOS行しか表示されず、 cmd LC_VERSION_MIN_IPHONEOSがなく、間違ったターゲットプラットフォーム用にビルドされたライブラリのオブジェクトにリンカが不平を言っていないということです。また file1, file2などは、 otool -l libproblematic.aの出力には現れません。

関連する問題