Ubuntu21.04下Go运行报错collect2: error: ld returned 1 exit status求助
问题定位
从你提供的go env输出可直接确定根因:
你全局Go环境中配置了CGO_LDFLAGS="-L/home/bob/ffmpeg/lib/ -lavcodec -lavformat -lavutil -lswscale -lswresample -lavdevice -lavfilter",且CGO_ENABLED=1处于开启状态。
你提供的最小示例仅用到标准库net/http,未直接调用cgo或FFmpeg逻辑,但Go标准库net/http在CGO开启状态下编译时会触发cgo链接流程,此时链接器会强制加载你全局配置的FFmpeg链接参数,而/home/bob/ffmpeg/lib/路径下不存在对应的FFmpeg库文件,因此抛出找不到库的错误。简单Hello World程序不会触发cgo编译流程,所以运行正常。
解决方案
方案1:临时禁用CGO运行
仅对当前命令关闭CGO,无需修改全局配置:
CGO_ENABLED=0 go run .
方案2:删除全局FFmpeg编译配置
你当前的全局FFmpeg编译参数大概率是之前配置其他项目时写入的,如果不需要全局生效,直接编辑/home/bob/.config/go/env文件,删除CGO_CFLAGS和CGO_LDFLAGS两行配置即可,后续所有Go项目编译都不会强制加载FFmpeg链接参数。
方案3:补全FFmpeg依赖
如果你确实需要全局保留FFmpeg的CGO配置,可通过两种方式补全依赖:
- 自行编译FFmpeg,将生成的库文件放入
/home/bob/ffmpeg/lib/路径下 - 直接安装系统级FFmpeg开发包:
sudo apt install libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev libavdevice-dev libavfilter-dev
安装完成后修改CGO_LDFLAGS配置,删除-L/home/bob/ffmpeg/lib/部分,直接调用系统路径的FFmpeg库即可。
内容的提问来源于stack exchange,提问作者Nothingbetter
相关产品推荐
相关产品推荐

