编译 PortAudio 示例时出错
Error while compiling PortAudio examples
(我在 Ubuntu)我正在尝试 运行 PortAudio 示例,但遇到很多错误(如下所述)。我已经将头文件 portaudio.h 放在程序的目录中。我对此一无所知。我认为这是链接器错误。请帮忙!
/tmp/cc5EbTlT.o: 在函数中 main':
paex_record.c:(.text+0x37e): undefined reference to
Pa_Initialize'
paex_record.c:(.text+0x397): 对 Pa_GetDefaultInputDevice'
paex_record.c:(.text+0x3de): undefined reference to
Pa_GetDeviceInfo 的未定义引用
paex_record.c:(.text+0x436): 对 Pa_OpenStream'
paex_record.c:(.text+0x45a): undefined reference to
Pa_StartStream 的未定义引用
paex_record.c:(.text+0x493): 未定义引用 Pa_Sleep'
paex_record.c:(.text+0x4c2): undefined reference to
Pa_IsStreamActive'
paex_record.c:(.text+0x4eb): 对 Pa_CloseStream'
paex_record.c:(.text+0x5fa): undefined reference to
Pa_GetDefaultOutputDevice 的未定义引用
paex_record.c:(.text+0x641): 对 Pa_GetDeviceInfo'
paex_record.c:(.text+0x6b2): undefined reference to
Pa_OpenStream 的未定义引用
paex_record.c:(.text+0x6e3): 对 Pa_StartStream'
paex_record.c:(.text+0x71c): undefined reference to
Pa_Sleep 的未定义引用
paex_record.c:(.text+0x728): 未定义引用 Pa_IsStreamActive'
paex_record.c:(.text+0x74e): undefined reference to
Pa_CloseStream'
paex_record.c:(.text+0x77d): 未定义引用 Pa_Terminate'
paex_record.c:(.text+0x7e5): undefined reference to
Pa_GetErrorText'
collect2:错误:ld 返回了 1 个退出状态
假设您正在使用 gcc 进行编译并且您有一个 C 文件 foo.c
,编译器命令将是
gcc -o foo foo.c -lrt -lasound -ljack -lpthread -lportaudio
-l
参数用于 link 程序所需的库,例如-lrt
将 link librt.a
。顺序很重要。
我从这里获得了所需的库:http://www.portaudio.com/docs/v19-doxydocs/compile_linux.html#comp_linux3。不知道他们是否正确。至少你需要-lportaudio
,显然。
如果找不到库,您必须为 gcc 提供一个路径,例如
gcc -L/usr/lib -o foo foo.c -lrt -lasound -ljack -lpthread -lportaudio
关于 header,您实际上不需要将其复制到您的程序目录中。您宁愿将其包含为
#include <portaudio.h>
并将其目录添加到包含搜索路径:
gcc -I/usr/include -L/usr/lib -o foo foo.c -lrt -lasound -ljack -lpthread -lportaudio
当然,所有这些最好在 Makefile 中完成。
(我在 Ubuntu)我正在尝试 运行 PortAudio 示例,但遇到很多错误(如下所述)。我已经将头文件 portaudio.h 放在程序的目录中。我对此一无所知。我认为这是链接器错误。请帮忙!
/tmp/cc5EbTlT.o: 在函数中 main':
paex_record.c:(.text+0x37e): undefined reference to
Pa_Initialize'
paex_record.c:(.text+0x397): 对 Pa_GetDefaultInputDevice'
paex_record.c:(.text+0x3de): undefined reference to
Pa_GetDeviceInfo 的未定义引用
paex_record.c:(.text+0x436): 对 Pa_OpenStream'
paex_record.c:(.text+0x45a): undefined reference to
Pa_StartStream 的未定义引用
paex_record.c:(.text+0x493): 未定义引用 Pa_Sleep'
paex_record.c:(.text+0x4c2): undefined reference to
Pa_IsStreamActive'
paex_record.c:(.text+0x4eb): 对 Pa_CloseStream'
paex_record.c:(.text+0x5fa): undefined reference to
Pa_GetDefaultOutputDevice 的未定义引用
paex_record.c:(.text+0x641): 对 Pa_GetDeviceInfo'
paex_record.c:(.text+0x6b2): undefined reference to
Pa_OpenStream 的未定义引用
paex_record.c:(.text+0x6e3): 对 Pa_StartStream'
paex_record.c:(.text+0x71c): undefined reference to
Pa_Sleep 的未定义引用
paex_record.c:(.text+0x728): 未定义引用 Pa_IsStreamActive'
paex_record.c:(.text+0x74e): undefined reference to
Pa_CloseStream'
paex_record.c:(.text+0x77d): 未定义引用 Pa_Terminate'
paex_record.c:(.text+0x7e5): undefined reference to
Pa_GetErrorText'
collect2:错误:ld 返回了 1 个退出状态
假设您正在使用 gcc 进行编译并且您有一个 C 文件 foo.c
,编译器命令将是
gcc -o foo foo.c -lrt -lasound -ljack -lpthread -lportaudio
-l
参数用于 link 程序所需的库,例如-lrt
将 link librt.a
。顺序很重要。
我从这里获得了所需的库:http://www.portaudio.com/docs/v19-doxydocs/compile_linux.html#comp_linux3。不知道他们是否正确。至少你需要-lportaudio
,显然。
如果找不到库,您必须为 gcc 提供一个路径,例如
gcc -L/usr/lib -o foo foo.c -lrt -lasound -ljack -lpthread -lportaudio
关于 header,您实际上不需要将其复制到您的程序目录中。您宁愿将其包含为
#include <portaudio.h>
并将其目录添加到包含搜索路径:
gcc -I/usr/include -L/usr/lib -o foo foo.c -lrt -lasound -ljack -lpthread -lportaudio
当然,所有这些最好在 Makefile 中完成。