2009-04-26 2 views
2

私はC++プログラミングを始めようとしていますが、私は少しの細部に対してはかなり苦労しています。今、私は下のスニペットを動作させようとしています、そして明らかにそれはコンパイルされますが、リンクされません。 (エラーメッセージはこの記事の末尾にあります)未定義のシンボル:_sf_open(OSXのシンプルなオーディオ)

私はlibsndfileを使用してオーディオファイルを開きます。リンカーは、そのためのcorrentライブラリファイルを見つけられないようです。これはOS X 10.5にあります。

私はmega-nerd.comからlibsndfileをダウンロードして、、makesudo make installという手順でインストールしました。私に必要なことは他にありますか?

編集:システムにmacportsがインストールされていることがあります。

は、ここに私のコードです:

#include <iostream> 
#include <string> 
#include <sndfile.h> 
#include "stereoSplit.h" 
using namespace std; 

int stereoSplit(string filename) 
{ 
    cout << filename; 
    SF_INFO sfinfo; 
    sfinfo.format = 0; 
    SNDFILE * soundfile; 
    soundfile = sf_open(filename.c_str(), SFM_READ, &sfinfo); 
    return 0; 
} 

int main (int argc, char const *argv[]) 
{ 
    return stereoSplit("testStereo.wav"); 
} 

そして、ここで完全なエラーメッセージです:

Undefined symbols: 
    "_sf_open", referenced from: 
     stereoSplit(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)in cc3hvkkk.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
+1

コンパイラの呼び出し行をコピー/貼り付けできますか?あなたの問題に対処するのに役立ちます。 –

+0

@yves Neil Butterworthの答えを参照してください。私の行はg ++のstereoSplit.cpp -o split'でした。お二人の助けてくれてありがとう! – winsmith

答えて

3

あなたはライブラリにリンクする必要があります。 、Xcodeでライブラリをリンクするプロジェクトのターゲットを選択し、ライブラリとバイナリのリンク、およびコンピュータ上のlibsndfile.1.dynlibを見つけるために、新しい項目を追加するには

g++ mystuff.cpp -lsndfile 
-1

:あなたのコンパイラのコマンドは次のようになります。