2012-04-03 11 views
2

スタティックライブラリとしてライブラリ(portaudio)をリンクする必要があります。私は次のことを行うとportaudioライブラリをスタティックライブラリとしてリンクできません

arm-none-linux-gnueabi-gcc -static -L/media/Data/lib/.libs -lportaudio prova.cpp 

リンクは、私に

/tmp/ccuoQi1J.o: In function `main': 
prova.cpp:(.text+0x190): undefined reference to `Pa_Initialize' 
prova.cpp:(.text+0x1bc): undefined reference to `Pa_GetDeviceCount' 
prova.cpp:(.text+0x1d8): undefined reference to `Pa_GetDeviceInfo' 
prova.cpp:(.text+0x248): undefined reference to `Pa_OpenDefaultStream' 
prova.cpp:(.text+0x27c): undefined reference to `Pa_CloseStream' 
prova.cpp:(.text+0x280): undefined reference to `Pa_Terminate' 
collect2: ld returned 1 exit status 

しばらく言って失敗した-staticオプションを使用せずに、リンクは

私は静的にすべてのLIBSをリンクする必要があり
arm-none-linux-gnueabi-g++ -L/media/Data/lib/.libs -lportaudio prova.cpp 

は、あるエラーを与えませんそれは可能ですか? gcc linking optionsから

答えて

2

、動的リンクをサポートするシステムで

-static

、これは 共有ライブラリとリンク防止します。他のシステムでは、このオプションは効果がありません。ここで

は、すべての未定義シンボルは共有ライブラリですlibportaudioライブラリであり、あなたが-staticので、エラーを指定することで、それにリンク防止されています。 gccは指定されたライブラリパス(/media/Data/lib/.libs)にあるlibportaudioの静的バージョンを見つけることができません

なぜその共有ライブラリを静的にリンクしたいのですか?具体的な理由は何ですか?

あなたはhttp://www.portaudio.com/download.htmlからPAのための最新のソースをダウンロードしていると、静的にOSX上でのテストプログラムの一つにライブラリをリンクしようとしている場合はどのようにgccの扱いshared and static libraries.

+0

ターゲットシステムにインストールしたくないので、その共有ライブラリを静的にリンクしたいと思っています。これはファイルシステムが永続的ではないため、私は毎回ライブラリをインストールする必要があります。私はそれができるかどうかわからない、多分静的なバージョンにライブラリを構築する必要があります。 – gc5

+0

私は以下の結果を得ないで試しました: 'arm-none-linux-gnueabi-gcc -Wall -static -I ../portaudio/include ../portaudio/lib/.libs/libportaudio.a prova.cpp ' と ' arm-none-linux-gnueabi-gcc -Wall -static -I ../ portaudio/include -L ../portaudio/lib/ .libs -portaudio prova.cpp' です。 拡張子が.aのライブラリは "../portaudio/lib/.libs"ディレクトリにあります – gc5

+0

これでリンクします: '/ home/francesco/dropbox/poli/bi/not/ip/cross/arm -2007q3/bin/arm-none-linux-gnueabi-gcc -Wall -static -I/home/francesco/Dropbox/poli/bi/not/ip/portaudio/include -L/home/francesco/Dropbox/poli/bi /not/ip/portaudio/lib/.libs prova.cpp'。 portaudio/lib/.libsの内容は 'file ../portaudio/lib/.libs/* ../portaudio/lib/.libs/libportaudio.a:現在のアーカイブファイル ../portaudio/lib/.libs /libportaudio.la: '../libportaudio.la'へのシンボリックリンク ../portaudio/lib/.libs/libportaudio.lai:libtoolライブラリファイル '。ところで、私は同じ結果を得る:| – gc5

0

についての詳細を理解するために、これを読むことをお勧めします

gcc -Iinclude examples/paex_sine.c lib/.libs/libportaudio.a -framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework CoreServices 

これは、秒のカップルのための正弦波を生成するプログラム「のa.out」を生成します。(最初にダウンロードしたportaudioフォルダのルートにcd)以下にするコマンドを試してみてください。少なくとも、これはヨセミテで試したときに起こったことです。

関連する問題