无法将portaudio库链接为静态库

时间:2012-04-03 11:20:45

标签: gcc linker arm 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选项,链接没有错误

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

我需要静态链接所有库,是否可能?

2 个答案:

答案 0 :(得分:2)

来自gcc linking options

  

<强> -static

     

在支持动态链接的系统上,这会阻止链接   共享库。在其他系统上,此选项无效。

这里,所有未定义的符号都在libportaudio库中,这是一个共享库,并且您通过指定-static来防止链接到它,从而导致错误。 gcc无法在指定的库路径(libportaudio)中找到/media/Data/lib/.libs的静态版本

为什么要静态链接共享库?有什么特别的原因吗?

您可能需要阅读此内容,以了解有关gcc如何处理shared and static libraries.

的更多信息

答案 1 :(得分:0)

如果您从http://www.portaudio.com/download.html下载了最新的PA源并尝试将该库静态链接到OSX上的某个测试程序,请尝试以下make命令(cd到您下载的portaudio的根目录)文件夹优先):

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

这将产生一个程序“a.out”,它会产生几秒钟的正弦波。至少这是我在Yosemite上测试时发生的事情。