23

ネイティブ iOS アプリケーション (多数の .a ライブラリ) でサードパーティのフレームワークを使用しています。私のアプリケーションは、XCode 5 ベースの SDK 7.0 で開発されています。

展開ターゲットが 6.1 の場合、ライブラリは正常にコンパイルおよびリンクされます (ライブラリとヘッダーの検索パスは適切です)。ただし、展開ターゲットを 7.0 に変更すると、次のリンカー エラーが発生します。

Undefined symbols for architecture i386:
  "std::string::find_last_of(char const*, unsigned long) const", referenced from:
      GetExecutionDir(ECTemplateString<char>&, char*, bool) in myLibrary.a(moPlatForm.o)
  "std::string::find(char const*, unsigned long) const", referenced from:
      ParseLog(std::string const&, unsigned int&, CmoDateTime&, int&, std::string&) in myLibrary.a(AppLog.o)
  "std::string::size() const", referenced from:
      mo::CmoParam::WriteToStream(void*, mo::STREAM_STATE*) in myLibrary.a(moParams.o)
  "std::string::c_str() const", referenced from:
      GetExecutionDir(ECTemplateString<char>&, char*, bool) in myLibrary.a(moPlatForm.o)
      CMocaFileTransfer::UpdateParamsForGetTraceFiles(mo::CmoParamList&, long) in myLibrary.a(RobieFileTransfer.o)
      CMocaFileTransfer::AddTraceFileForUpload(std::string const&, std::string const&) in myLibrary.a(RobieFileTransfer.o)
      CMocaFileTransfer::CreateParamsForSendTraceFiles(mo::CmoObject&) in myLibrary.a(RobieFileTransfer.o)
      mo::CmoParam::WriteToStream(void*, mo::STREAM_STATE*) in myLibrary.a(moParams.o)
      ParseLog(std::string const&, unsigned int&, CmoDateTime&, int&, std::string&) in myLibrary.a(AppLog.o)
      CAppLog::LogExists(unsigned int) in myLibrary.a(AppLog.o)
      ...

ライブラリは少し古いため、互換性の問題があるかどうかはわかりません。iOS 6 をサポートする予定はないので、展開ターゲットを 7.0 に設定する必要があります。どんな種類のヘルプ/指示も素晴らしいでしょう。

4

3 に答える 3

46

私にとっては、「stdc++.dylib」の代わりに「stdc++.6.0.9.dylib」を依存関係に含めることで、リンカーエラーも解決しました

于 2014-04-02T11:05:34.010 に答える