如何编译 pacat-simple.c?

如何编译 pacat-simple.c?

我想尝试编写一些代码来使用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。但现在我假设这表明我的系统存在不同的问题。

相关内容