对Portaudio中错误的未定义引用

Undefined reference to error in Portaudio

本文关键字:未定义 引用 错误 Portaudio      更新时间:2023-10-16

我正在尝试使用PortAudio通过麦克风进行音频录制。但我有一堆错误-

Compiling single file...
--------
- Filename: C:UsersGummDownloadspa_stable_v190600_20161030portaudioexamplespaex_record.c
- Compiler Name: TDM-GCC 4.9.2 64-bit Debug
Processing C source file...
--------
- C Compiler: C:Program Files (x86)Dev-CppMinGW64bingcc.exe
- Command: gcc.exe "C:UsersGummDownloadspa_stable_v190600_20161030portaudioexamplespaex_record.c" -o "C:UsersGummDownloadspa_stable_v190600_20161030portaudioexamplespaex_record.exe" -g3 -I"C:Program Files (x86)Dev-CppMinGW64include" -I"C:Program Files (x86)Dev-CppMinGW64x86_64-w64-mingw32include" -I"C:Program Files (x86)Dev-CppMinGW64libgccx86_64-w64-mingw324.9.2include" -L"C:Program Files (x86)Dev-CppMinGW64lib" -L"C:Program Files (x86)Dev-CppMinGW64x86_64-w64-mingw32lib" -L"C:UsersGummDownloadspa_stable_v190600_20161030portaudioexamples" -g3
C:UsersGummAppDataLocalTempccih6neG.o: In function `main':
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:224: undefined reference to `Pa_Initialize'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:227: undefined reference to `Pa_GetDefaultInputDevice'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:234: undefined reference to `Pa_GetDeviceInfo'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:238: undefined reference to `Pa_OpenStream'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:249: undefined reference to `Pa_StartStream'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:255: undefined reference to `Pa_Sleep'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:253: undefined reference to `Pa_IsStreamActive'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:260: undefined reference to `Pa_CloseStream'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:303: undefined reference to `Pa_GetDefaultOutputDevice'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:310: undefined reference to `Pa_GetDeviceInfo'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:314: undefined reference to `Pa_OpenStream'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:327: undefined reference to `Pa_StartStream'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:332: undefined reference to `Pa_Sleep'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:332: undefined reference to `Pa_IsStreamActive'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:335: undefined reference to `Pa_CloseStream'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:342: undefined reference to `Pa_Terminate'
C:/Users/Gumm/Downloads/pa_stable_v190600_20161030/portaudio/examples/paex_record.c:349: undefined reference to `Pa_GetErrorText'
collect2.exe: error: ld returned 1 exit status

Compilation results...
--------
- Errors: 1
- Warnings: 0
- Compilation Time: 0.53s

我知道这是一个链接器错误,但我无法从下载的portaudio中找到任何.lib文件。如何解决此问题?

<嘿>

看起来你正在尝试构建一个端口音频示例,而没有首先构建和/或链接portaudio库!

为窗户建造portaudio

自从你在Windows上,有两种主要的方法来构建portaudio(官方文档参考(:

  1. 使用Visual Studio(VS(:portaudio下载提供了一个VS项目,在编译之前(希望如此(,您必须更改一些小事情。

  2. 使用MinGW:在windows上构建portaudio的命令行版本。如果你还没有安装MinGW,你需要安装,但我认为这种方法比我过去尝试使用Visual Studio要容易得多。

您使用的任何一种技术都将生成一个静态.lib文件,然后您可以使用该文件链接到您的项目(即您试图编译的源文件(。

链接portaudio

Visual Studio

因此,由于您在Windows上,如果您想准备好一个安装项目,我建议您在Visual Studio中执行此操作(创建一个空的c++命令行程序,并添加paex_recort.c文件(。以下是在VS中设置静态库的快速方法。

  • 引用Project中的库头(portaudio.h(属性->C/C++->常规->附加包含目录

  • 参考项目属性->链接器->输入中的.lib(portaudio.lib(

有关创建和使用静态库的更多信息。

MinGW

在我看来,使用MinGW实际上要简单得多,但如果你不习惯在命令行中工作,你可能不喜欢它。

假设您的项目目录中有三个文件(为了简单起见(:

Project Folder
|paex_record.c
|portaudio.lib
|portaudio.h

那么编译命令(源(是:

cd /Project/Directory
gcc paex_record.c -lportaudio