我需要将库(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
我需要静态链接所有库,是否可能?
答案 0 :(得分:2)
<强> -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上测试时发生的事情。