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 链接选项

-静止的

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

在这里,您所有未定义的符号都在libportaudio作为共享库的库中,并且您通过指定-static和因此错误来阻止链接到它。libportaudiogcc在指定的库路径中找不到静态版本( /media/Data/lib/.libs)

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

您可能想阅读这篇文章以了解更多关于 gcc 如何处理共享库和静态库的信息。

于 2012-04-03T13:11:23.060 回答
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”,它会在几秒钟内产生一个正弦波。至少这是我在优胜美地测试时发生的情况。

于 2014-11-13T09:13:07.203 回答