2012-04-03 57 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选项,联没有给出错误

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

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

回答

2

gcc linking options

-static

在支持动态链接系统中,这防止与 共享库链接。在其他系统上,此选项不起作用。

在这里,你的所有未定义的符号是libportaudio库,它是一个共享库,你是阻止链接到它通过指定-static,因此错误。 gcc无法在指定的库路径中找到libportaudio的静态版本(/media/Data/lib/.libs

为什么要静态链接该共享库?任何具体原因?

您可能需要阅读此了解更多关于如何GCC对待shared and static libraries.

+0

我想静态链接共享库,因为我不想将其安装在目标系统中;这是因为文件系统不是持久的,我将不得不在每次启动时安装库。我不知道是否可以完成,也许我必须建立图书馆到一个静态版本。 – gc5 2012-04-07 15:57:10

+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 -lportaudio prova.cpp' 。 扩展名为.a的库位于目录“../portaudio/lib/.libs” – gc5 2012-04-11 13:27:48

+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:current ar archive ../portaudio/lib/.libs /libportaudio.la:符号链接到'../libportaudio.la' ../portaudio/lib/.libs/libportaudio.lai:libtool库文件 '。顺便说一句,我得到了同样的结果:| – gc5 2012-04-11 13:44:17

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”,将产生几秒钟的正弦波。至少这是我在优胜美地上进行测试时发生的情况。