我想尝试编写一些代码来使用pulseaudio 进行音频播放。官方文档中有一个简单的示例程序:pacat-简单.c。
我确保libpulse-dev
安装了该软件包,并确认#include
该程序中的脉冲标头 d 实际上存在于/usr/include/pulse
.然后,我将,pacat-simple.c
中的文件复制/usr/share/doc/libpulse-dev/examples/
到另一个文件夹,因为我打算稍微用它来看看事情是如何工作的。 (这个文件实际上与我上面链接的版本略有不同,但无论如何。)
由于我无法找到该示例文件的任何具体说明,我认为它可能很简单:
gcc pacat-simple.c
但这给了我来自链接器的以下错误消息:
/usr/bin/ld: /tmp/cciylcLH.o: in function `main':
pacat-simple.c:(.text+0xf1): undefined reference to `pa_simple_new'
/usr/bin/ld: pacat-simple.c:(.text+0x113): undefined reference to `pa_strerror'
/usr/bin/ld: pacat-simple.c:(.text+0x15b): undefined reference to `pa_simple_read'
/usr/bin/ld: pacat-simple.c:(.text+0x16c): undefined reference to `pa_strerror'
/usr/bin/ld: pacat-simple.c:(.text+0x1f2): undefined reference to `pa_simple_free'
collect2: error: ld returned 1 exit status
经过一番搜索,我发现了一个旧论坛帖子建议添加以下标志-lpulse-simple -lpulse
来链接到这些.so
文件。回想起来,我需要这样做是有道理的。
所以,我尝试跑步
gcc -lpulse-simple -lpulse pacat-simple.c
但我收到了上面显示的相同错误消息(当然有不同的临时文件名)。我还缺少其他东西吗?
答案1
跑步
gcc pacat-simple.c -lpulse-simple -lpulse
“成功”给了我一个可执行文件,如果传递声音文件的文件名,它会在扬声器中播放乱码。但是,如果我将相同的文件名传递到真实文件中pacat
,那么我通常(但并非总是!)得到类似的结果。 (有时新编译的可执行文件会更快停止并打印出pa_simple_write() failed: Invalid argument
。但现在我假设这表明我的系统存在不同的问题。