1

id3lib を XCode プロジェクトに静的にリンクしようとしています。リンカーが.aファイルへのフルパスをフラグとして追加することを提案する他のスレッドでいくつかの回答を見つけました。これは機能しますが、膨大な数のエラーが発生します。

Undefined symbols for architecture x86_64:
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::copy(char*, unsigned long, unsigned long) const", referenced from:
      dami::io::StringReader::readChars(unsigned char*, unsigned int) in libid3.a(tag_impl.o)
      dami::convert(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, ID3_TextEnc, ID3_TextEnc) in libid3.a(utils.o)
      dami::io::StringReader::readChars(unsigned char*, unsigned int) in libid3.a(tag_parse_lyrics3.o)
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::compare(char const*) const", referenced from:
      ID3_TagImpl::IsV2Tag(ID3_Reader&) in libid3.a(tag_impl.o)
      dami::mm::parse(ID3_TagImpl&, ID3_Reader&) in libid3.a(tag_parse_musicmatch.o)
      dami::id3::v1::parse(ID3_TagImpl&, ID3_Reader&) in libid3.a(tag_parse_v1.o)
      dami::lyr3::v1::parse(ID3_TagImpl&, ID3_Reader&) in libid3.a(tag_parse_lyrics3.o)
      dami::lyr3::v2::parse(ID3_TagImpl&, ID3_Reader&) in libid3.a(tag_parse_lyrics3.o)
  "std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from:
      void std::__1::vector<ID3_Field*, std::__1::allocator<ID3_Field*> >::__push_back_slow_path<ID3_Field* const>(ID3_Field* const&) in libid3.a(frame_impl.o)
  "std::__1::__basic_string_common<true>::__throw_length_error() const", referenced from:
      std::__1::basic_string<unsigned char, std::__1::char_traits<unsigned char>, std::__1::allocator<unsigned char> >::reserve(unsigned long) in libid3.a(tag.o)
      std::__1::basic_string<unsigned char, std::__1::char_traits<unsigned char>, std::__1::allocator<unsigned char> >::__grow_by_and_replace(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned char const*) in libid3.a(tag.o)
      std::__1::basic_string<unsigned char, std::__1::char_traits<unsigned char>, 

等々。繰り返しますが、グーグルは、問題が標準ライブラリの選択である可能性があることを示唆しています。したがって、C ++標準ライブラリフィールドを「コンパイラのデフォルト」から「libstdc ++」(それでも大量のエラーが発生しています)または「libc ++」に切り替えようとしましたが、エラーが少なくなりました。

Undefined symbols for architecture x86_64:
  "_compress", referenced from:
      dami::io::CompressedWriter::flush() in libid3.a(io_decorators.o)
  "_iconv", referenced from:
      dami::convert(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, ID3_TextEnc, ID3_TextEnc) in libid3.a(utils.o)
  "_iconv_close", referenced from:
      dami::convert(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, ID3_TextEnc, ID3_TextEnc) in libid3.a(utils.o)
  "_iconv_open", referenced from:
      dami::convert(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, ID3_TextEnc, ID3_TextEnc) in libid3.a(utils.o)
  "_uncompress", referenced from:
      dami::io::CompressedReader::CompressedReader(ID3_Reader&, unsigned int) in libid3.a(io_decorators.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

これを解決する方法がわかりません。リンカー フラグとしてライブラリのフル パスを削除すると、すべてが機能するように見えますが、ライブラリは動的にリンクされます (これは機能しません)。私は Mac OS X 10.10 を使用しています。id3lib は自作でインストールされました (手動インストール テストでも同様の結果が得られました)。

誰も手がかりを持っていますか?

ありがとう、ダニエレ

4

1 に答える 1

0

プロジェクト設定の[バイナリをライブラリにリンク]に移動し、プロジェクトをシステム ライブラリ libz (_compress、_uncompress) および libiconv (_iconv、_iconv_close、_iconv_open) にリンクします。

于 2016-09-08T10:55:22.570 に答える