4

こんにちは、Mac OSX 10.6 で libsndfile 1.0.25 をコンパイルしようとしています。

私はbrewでlibvorbis-1.3.4とlibogg-1.3.1をインストールしました

1 - brewでlibsndfileをインストールしてみた

2 - libsndfile を ./configure と make で手動でインストールしてみました

./configure ステップは libvorbis と libogg を見つけるようで、これらが x86_64 ライブラリであることを確認しました。出力に、実装方法がわからないというヒントがあり、誰かがすぐに見つけられることを願っています。ご覧いただきありがとうございます。

BREW エラー出力:

==> Downloading http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.25.tar.gz
Already downloaded: /Library/Caches/Homebrew/libsndfile-1.0.25.tar.gz
==> Downloading patches
######################################################################## 100.0%
######################################################################## 100.0%
==> Patching
patching file programs/sndfile-play.c
patching file M4/clang.m4
patching file M4/really_gcc.m4
patching file configure.ac
==> autoreconf -i

If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
configure.ac:207: error: possibly undefined macro: AC_SYS_EXTRA_LARGEFILE
configure.ac:295: error: possibly undefined macro: AC_OCTAVE_BUILD
autoreconf: /usr/bin/autoconf failed with exit status: 1

手動のメイク エラー出力:

  CCLD   libsndfile.la
Undefined symbols for architecture x86_64:
  "_vorbis_comment_clear", referenced from:
      _vorbis_end in ogg_vorbis.o
      _vorbis_read_header in ogg_vorbis.o
      _vorbis_close in ogg_vorbis.o
  "_vorbis_info_clear", referenced from:
      _vorbis_end in ogg_vorbis.o
      _vorbis_read_header in ogg_vorbis.o
      _vorbis_close in ogg_vorbis.o
  "_ogg_stream_reset", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _ogg_open in libcommon.a(ogg.o)
  "_ogg_sync_reset", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _ogg_open in libcommon.a(ogg.o)
  "_ogg_sync_buffer", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _ogg_vorbis_open in ogg_vorbis.o
      _vorbis_read_sample in ogg_vorbis.o
      _ogg_open in libcommon.a(ogg.o)
  "_ogg_sync_wrote", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _ogg_vorbis_open in ogg_vorbis.o
      _vorbis_read_sample in ogg_vorbis.o
      _ogg_open in libcommon.a(ogg.o)
  "_ogg_sync_pageout", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _ogg_vorbis_open in ogg_vorbis.o
      _vorbis_read_sample in ogg_vorbis.o
      _ogg_open in libcommon.a(ogg.o)
  "_ogg_stream_clear", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _ogg_vorbis_open in ogg_vorbis.o
      _ogg_close in libcommon.a(ogg.o)
      _ogg_open in libcommon.a(ogg.o)
  "_ogg_page_serialno", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _ogg_vorbis_open in ogg_vorbis.o
      _ogg_open in libcommon.a(ogg.o)
  "_ogg_stream_init", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _ogg_vorbis_open in ogg_vorbis.o
      _vorbis_write_header in ogg_vorbis.o
      _ogg_open in libcommon.a(ogg.o)
  "_ogg_stream_pagein", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _ogg_vorbis_open in ogg_vorbis.o
      _vorbis_read_sample in ogg_vorbis.o
      _ogg_open in libcommon.a(ogg.o)
  "_ogg_stream_packetout", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _ogg_vorbis_open in ogg_vorbis.o
      _vorbis_read_sample in ogg_vorbis.o
      _ogg_open in libcommon.a(ogg.o)
  "_vorbis_block_clear", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _vorbis_close in ogg_vorbis.o
  "_vorbis_dsp_clear", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _vorbis_close in ogg_vorbis.o
  "_vorbis_info_init", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _ogg_vorbis_open in ogg_vorbis.o
      _vorbis_write_header in ogg_vorbis.o
  "_vorbis_comment_init", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _ogg_vorbis_open in ogg_vorbis.o
      _vorbis_write_header in ogg_vorbis.o
  "_vorbis_synthesis_headerin", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _ogg_vorbis_open in ogg_vorbis.o
  "_vorbis_synthesis_init", referenced from:
      _vorbis_read_header in ogg_vorbis.o
  "_vorbis_block_init", referenced from:
      _vorbis_read_header in ogg_vorbis.o
      _vorbis_write_header in ogg_vorbis.o
  "_vorbis_comment_query", referenced from:
      _vorbis_read_header in ogg_vorbis.o
  "_vorbis_version_string", referenced from:
      _ogg_vorbis_open in ogg_vorbis.o
  "_ogg_sync_init", referenced from:
      _ogg_vorbis_open in ogg_vorbis.o
      _ogg_open in libcommon.a(ogg.o)
  "_ogg_page_eos", referenced from:
      _ogg_vorbis_open in ogg_vorbis.o
      _vorbis_read_sample in ogg_vorbis.o
      _vorbis_write_samples in ogg_vorbis.o
      _vorbis_close in ogg_vorbis.o
  "_ogg_sync_clear", referenced from:
      _ogg_vorbis_open in ogg_vorbis.o
      _ogg_close in libcommon.a(ogg.o)
      _ogg_open in libcommon.a(ogg.o)
  "_ogg_page_granulepos", referenced from:
      _ogg_vorbis_open in ogg_vorbis.o
  "_vorbis_synthesis_pcmout", referenced from:
      _vorbis_read_sample in ogg_vorbis.o
  "_vorbis_synthesis_read", referenced from:
      _vorbis_read_sample in ogg_vorbis.o
  "_vorbis_synthesis", referenced from:
      _vorbis_read_sample in ogg_vorbis.o
  "_vorbis_synthesis_blockin", referenced from:
      _vorbis_read_sample in ogg_vorbis.o
  "_vorbis_analysis_wrote", referenced from:
      _vorbis_write_samples in ogg_vorbis.o
      _vorbis_close in ogg_vorbis.o
  "_vorbis_analysis_blockout", referenced from:
      _vorbis_write_samples in ogg_vorbis.o
      _vorbis_close in ogg_vorbis.o
  "_vorbis_analysis", referenced from:
      _vorbis_write_samples in ogg_vorbis.o
      _vorbis_close in ogg_vorbis.o
  "_vorbis_bitrate_addblock", referenced from:
      _vorbis_write_samples in ogg_vorbis.o
      _vorbis_close in ogg_vorbis.o
  "_vorbis_bitrate_flushpacket", referenced from:
      _vorbis_write_samples in ogg_vorbis.o
      _vorbis_close in ogg_vorbis.o
  "_ogg_stream_packetin", referenced from:
      _vorbis_write_samples in ogg_vorbis.o
      _vorbis_write_header in ogg_vorbis.o
      _vorbis_close in ogg_vorbis.o
  "_ogg_stream_pageout", referenced from:
      _vorbis_write_samples in ogg_vorbis.o
      _vorbis_close in ogg_vorbis.o
  "_vorbis_analysis_buffer", referenced from:
      _vorbis_write_d in ogg_vorbis.o
      _vorbis_write_f in ogg_vorbis.o
      _vorbis_write_i in ogg_vorbis.o
      _vorbis_write_s in ogg_vorbis.o
  "_vorbis_comment_add_tag", referenced from:
      _vorbis_write_header in ogg_vorbis.o
  "_vorbis_analysis_init", referenced from:
      _vorbis_write_header in ogg_vorbis.o
  "_vorbis_analysis_headerout", referenced from:
      _vorbis_write_header in ogg_vorbis.o
  "_ogg_stream_flush", referenced from:
      _vorbis_write_header in ogg_vorbis.o
ld: symbol(s) not found for architecture x86_64
4

1 に答える 1

0

1 つの解決策:

似ているが同一ではない libsndfile リンカ エラーが発生しました。

問題はconfigure、libsndfile tar.gz 自体で提供されるスクリプトにあるようです。

それは良い知らせだ。これは、libvorbis バイナリにも libogg バイナリにも問題がないことを意味します。homebrew によって提供される libvorbis および libogg に対する libsndfile のリンクを妨げる基本的な ABI の問題はありません。

configurelibsndfileのスクリプトで次の行を見つけました。

    EXTERNAL_CFLAGS="$FLAC_CFLAGS $OGG_CFLAGS $VORBISENC_CFLAGS"
        EXTERNAL_LIBS="$FLAC_LIBS $VORBISENC_LIBS"

(これらの行はそのままコピーされます。元のスクリプトではインデントが不安定です。)

矛盾に気づきますか?

EXTERNAL_CFLAGSは 3 セットのフラグを連結して形成されていますが、EXTERNAL_LIBS2 つだけ連結して形成されています。

これらの行を次のように更新すると、すべてをビルドしてリンクすることができました。

    EXTERNAL_CFLAGS="$FLAC_CFLAGS $OGG_CFLAGS $VORBIS_CFLAGS $VORBISENC_CFLAGS"
        EXTERNAL_LIBS="$FLAC_LIBS $OGG_LIBS $VORBIS_LIBS $VORBISENC_LIBS"

物事を修正するのにかかったのはそれだけです。


私の裏話:

元の投稿 (@ubob による) では、試み 2 は次のように説明されています。

に渡されたオプション (存在する場合) を知らなければ./configure、私の答えが @ubob のシナリオに当てはまるかどうかを確実に知ることはできません。

私のオペレーティング システム: Mac OS X 10.8.1

libsndfile ソース配布バージョン: libsndfile-1.0.24 (ただし、libsndfile-1.0.25 も試したところ、同じ状況が見つかりましたEXTERNAL_LIBS)

自作から取得した依存関係: flac/1.3.1/lib/libFLAC.8.dylib libogg/1.3.2/lib/libogg.0.dylib libvorbis/1.3.5/lib/libvorbis.0.dylib libvorbis/1.3.5/lib/libvorbisenc.2.dylib libvorbis/1.3.5/lib/libvorbisfile.3.dylib

私のビルドコマンド:

export CC="clang -v"
export FLAC_CFLAGS="-I/whichever/path/leads/to/flac/1.3.1/include"
export FLAC_LIBS="-L/whichever/path/leads/toflac/1.3.1/lib -lFLAC.8"
export OGG_CFLAGS="-I/whichever/path/leads/tolibogg/1.3.2/include"
export OGG_LIBS="-L/whichever/path/leads/tolibogg/1.3.2/lib -logg.0"
export VORBIS_CFLAGS="-I/whichever/path/leads/tolibvorbis/1.3.5/include"
export VORBIS_LIBS="-L/whichever/path/leads/tolibvorbis/1.3.5/lib -lvorbis.0"
export VORBISENC_CFLAGS="-I/whichever/path/leads/tolibvorbis/1.3.5/include"
export VORBISENC_LIBS="-L/whichever/path/leads/tolibvorbis/1.3.5/lib -lvorbisenc.2 -lvorbisfile.3"

./configure --enable-external-libs --disable-static --enable-shared  --disable-sqlite --disable-dependency-tracking

make

上記のように と を調整するEXTERNAL_CFLAGSと、適切な を正常に構築できました。これは現在、アプリケーションで有効に使用され、正常に動作しています。EXTERNAL_LIBSlibsndfile.1.dylib


参考までに、私のリンカー エラーは次のとおりです。

  CCLD libsndfile.la
アーキテクチャ x86_64 の未定義のシンボル:
  「_ogg_page_eos」、次から参照:
      ogg.o の _ogg_open
      ogg.o の _ogg_close
      ogg.o の _ogg_read_sample
      ogg.o の _ogg_write_samples
  「_ogg_page_granulepos」、以下から参照:
      ogg.o の _ogg_open
  「_ogg_page_serialno」、次から参照:
      ogg.o の _ogg_open
      ogg.o の _ogg_read_header

[簡潔にするために省略]

  「_ogg_stream_reset」、次から参照:
      ogg.o の _ogg_read_header
  「_ogg_sync_buffer」、次から参照:
      ogg.o の _ogg_open
      ogg.o の _ogg_read_header
      ogg.o の _ogg_read_sample
  「_ogg_sync_clear」、次から参照:
      ogg.o の _ogg_open
      ogg.o の _ogg_close
  「_ogg_sync_init」、次から参照:
      ogg.o の _ogg_open
  「_ogg_sync_pageout」、次から参照:
      ogg.o の _ogg_open
      ogg.o の _ogg_read_header
      ogg.o の _ogg_read_sample
  「_ogg_sync_reset」、次から参照:
      ogg.o の _ogg_read_header

[簡潔にするために省略]

  「_vorbis_comment_clear」、参照先:
      ogg.o の _ogg_open
      ogg.o の _ogg_read_header
      ogg.o の _ogg_close
  「_vorbis_comment_init」、以下から参照:
      ogg.o の _ogg_open
      ogg.o の _ogg_read_header
      ogg.o の _ogg_write_header
  「_vorbis_comment_query」、参照先:
      ogg.o の _ogg_read_header
  「_vorbis_dsp_clear」、次から参照:
      ogg.o の _ogg_read_header
      ogg.o の _ogg_close
  「_vorbis_info_clear」、参照先:
      ogg.o の _ogg_open
      ogg.o の _ogg_read_header
      ogg.o の _ogg_close

[簡潔にするために省略]

ld: アーキテクチャ x86_64 のシンボルが見つかりません
clang: エラー: リンカー コマンドが終了コード 1 で失敗しました (呼び出しを確認するには -v を使用してください)
于 2015-08-22T00:15:23.143 に答える