zhang304251004 2023-03-30 21:10 采纳率: 33.3%
浏览 14
已结题

cgo在linux平台调用so库,一直报错

用go的cgo在linux平台调用so库。因为这个so有关联性,所以一直调用不成功。


package main

import (
    "fftest/dylib"
    "fmt"
    "os"
    "runtime"
    "sync"
)

// #cgo CFLAGS: -I./number
// #cgo LDFLAGS: -L${SRCDIR} -lnumber
var avformatDll *dylib.LazyDLL
var avformatDllOnce sync.Once

func main() {
    libPath, _ := os.Getwd()
    avformatPath := ""
    if runtime.GOOS == "linux" {
        os.Setenv("LD_LIBRARY_PATH", libPath+"/lib/linux")
        avformatPath = libPath + "/lib/linux/libavformat.so.58"
    } else {
        os.Setenv("LD_LIBRARY_PATH", libPath+"/lib/window")
        avformatPath = libPath + "/lib/window/avformat-58.dll"
    }

    fmt.Println("avformatPath=", avformatPath)
    avformatDllOnce.Do(func() {
        avformatDll = dylib.NewLazyDLL(avformatPath)
    })
    //avformatDll.NewProc("")
}

编译后
avformatPath= /home/go/1/fftest/lib/linux/libavformat.so
dlopen err: libavcodec.so.58: cannot open shared object file: No such file or directory
会报这个错误。
因为libavformat.so库涉及其他模块
我感觉我的问题是要把so库所有关联的库都要链接起来。当时不知道怎么实现。

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-31 18:08
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月22日
  • 已采纳回答 6月14日
  • 创建了问题 3月30日