【问题标题】:Unable to run program: collect2: error: ld returned 1 exit status无法运行程序:collect2:错误:ld 返回 1 退出状态
【发布时间】:2021-11-19 01:57:20
【问题描述】:

我已经查看了usr/bin/ld: cannot find -l<nameOfTheLibrary> 的答案,但没有一个适用于这种情况。

我刚买了一台新笔记本电脑并设置了 Go。一个简单的 hello world 程序可以工作,但是当我尝试一个更复杂的程序时,我得到:

go run .
# runtime/cgo
/usr/bin/ld: cannot find -lavcodec
/usr/bin/ld: cannot find -lavformat
/usr/bin/ld: cannot find -lavutil
/usr/bin/ld: cannot find -lswscale
/usr/bin/ld: cannot find -lswresample
/usr/bin/ld: cannot find -lavdevice
/usr/bin/ld: cannot find -lavfilter
collect2: error: ld returned 1 exit status

我不确定错误发生在我的程序的哪个位置,因为上面是我得到的唯一输出。

$ gcc --version
gcc (Ubuntu 10.3.0-1ubuntu1) 10.3.0

编辑: 这是一个重现错误的小样本:

package main

import "net/http"

func main() {
    cli := &http.Client{}
    rsp, err := cli.Get("https://google.com")
    if err != nil {
        panic(err)
    }

    defer rsp.Body.Close()

}

这是全新 Ubuntu 21.04 安装上的全新 Go 安装:

Go 版本: go version go1.16.8 linux/amd64

go env的输出:

$ go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN="/home/bob/go/bin"
GOCACHE="/home/bob/.cache/go-build"
GOENV="/home/bob/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/bob/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/bob/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org"
GOROOT="/snap/go/8408"
GOSUMDB="off"
GOTMPDIR=""
GOTOOLDIR="/snap/go/8408/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.16.8"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/bob/Desktop/projects/go.mod"
CGO_CFLAGS="-I/home/bob/ffmpeg/include"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-L/home/bob/ffmpeg/lib/ -lavcodec -lavformat -lavutil -lswscale -lswresample -lavdevice -lavfilter"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build2239100166=/tmp/go-build -gno-record-gcc-switches"

【问题讨论】:

  • 这个问题的答案不起作用,这就是我发布一个新问题的原因。 sudo ln -s /usr/lib/libz.so.1.2.8 /usr/lib/libzlib.so 我仍然遇到同样的错误。我也尝试过apt install,但没有成功。
  • 请显示minimal reproducible example,您似乎正在尝试链接到ffmpeg,您安装了ffmpeg 开发库吗?
  • 不确定go env 设置。有 ffmpeg 似乎很奇怪?
  • CGO_LDFLAGS 正在指定它期望在/home/bob/ffmpeg/lib/ 中的 ffmpeg 库
  • 你使用CGO吗?示例不需要任何提到的库。

标签: c linux go cgo


【解决方案1】:

标志-l 用于指示链接器应该用来构建您的应用程序的库。如果是新笔记本电脑,则可能未安装库。您应该能够使用以下命令安装所需的库:

sudo apt-get update -y
sudo apt-get install -y libavfilter-dev
sudo apt-get install -y libavcodec-dev
sudo apt-get install -y libavutil-dev
sudo apt-get install -y libswscale-dev
sudo apt-get install -y libswresample-dev
sudo apt-get install -y libavdevice-dev
sudo apt-get install -y libavfilter-dev

【讨论】:

    猜你喜欢
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多