问题1: 缺少对多个源文件的编译
您的项目包含多个 .c 文件,但当前任务配置只编译了 ${file}(当前打开的文件)。这导致链接阶段无法找到其他源文件的符号。
问题2: 缺少对库的链接
从错误提示来看,您使用的代码依赖于 WebRTC 的某些功能,但没有正确链接相关库(如数学库 -lm)。
解决方案
修改 tasks.json 更新 tasks.json,让编译器包含所有必要的源文件和库:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: gcc build Debug version",
"command": "/usr/bin/gcc",
"args": [
"-fdiagnostics-color=always",
"-g",
"${workspaceFolder}/WebRTC_AEC.c",
"${workspaceFolder}/aec_core.c",
"${workspaceFolder}/aec_rdft.c",
"${workspaceFolder}/aec_resampler.c",
"${workspaceFolder}/delay_estimator.c",
"${workspaceFolder}/delay_estimator_wrapper.c",
"${workspaceFolder}/echo_cancellation.c",
"${workspaceFolder}/ring_buffer.c",
"${workspaceFolder}/randomization_functions.c",
"${workspaceFolder}/signal_processing_library.c",
"-o",
"${workspaceFolder}/build/Debug/outDebug",
"-lm" // 数学库
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Generated build task for Debug version"
},
{
"label": "createBuildDir",
"type": "shell",
"command": "mkdir",
"args": ["-p", "${workspaceFolder}/build/Debug"],
"problemMatcher": []
}
]
}
关键点:
在 args 中,列出了所有依赖的 .c 文件。
添加 -lm 链接数学库。
如果未来需要链接其他外部库,也可以添加类似 -lwebrtc 的参数。
使用通配符(可选) 如果您的项目所有 .c 文件都需要编译,可以简化为:
"args": [
"-fdiagnostics-color=always",
"-g",
"${workspaceFolder}/*.c",
"-o",
"${workspaceFolder}/build/Debug/outDebug",
"-lm"
]
验证编译成功
保存 tasks.json,在 VS Code 中重新运行生成任务。
如果一切正确,undefined reference 错误将消失,项目会成功生成。
后续改进建议
如果项目逐渐变大,推荐使用 Makefile 或构建工具(如 CMake)管理构建过程。
在 tasks.json 中调用这些工具,可以进一步简化构建管理。