2

ライブラリ(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オプションがないと、リンクしてもエラーは発生しません

arm-none-linux-gnueabi-g++ -L/media/Data/lib/.libs -lportaudio prova.cpp

すべてのライブラリを静的にリンクする必要がありますが、可能ですか?

4

2 に答える 2

2

gcc linking optionsから、

-静的

動的リンクをサポートするシステムでは、これにより共有ライブラリとのリンクが妨げられます。他のシステムでは、このオプションは効果がありません。

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

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

これを読んで、gcc が共有ライブラリと静的ライブラリをどのように扱うかについて理解を深めることができます。

于 2012-04-03T13:11:23.060 に答える
0

http://www.portaudio.com/download.htmlから PA の最新ソースをダウンロードし、ライブラリを OSX 上のテスト プログラムの 1 つに静的にリンクしようとしている場合は、次の make コマンドを試してください (cd を最初にダウンロードした portaudio フォルダーのルート):

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

これにより、数秒間正弦波を生成するプログラム「a.out」が生成されます。少なくとも Yosemite でテストしたときはそうでした。

于 2014-11-13T09:13:07.203 に答える