Golang构建和运行可执行文件的完整指南

Golang构建和运行可执行文件的完整指南 大家好!我算是Go语言的新手,我使用OpenCV-4.0.0创建了一个C++代码,将其封装在C库中,并包含在我的Go项目中。以下是我的opencvTest.go文件:

package main

/*
#cgo LDFLAGS: -L/usr/local/lib -lopencv_core -lopencv_video -lopencv_videoio -lopencv_highgui -lopencv_tracking -lopencv_optflow
#include "dense_flow.h"
*/
import (
	"C"
	"fmt"
	"gocv.io/x/gocv"
)

func main(){

	sampleVideo := "URFD_images/Falls/fall_fall-01"
	fmt.Printf("Calculating Optical Flow for Video: %s", sampleVideo)


	previousFrame := gocv.NewMat()
	defer previousFrame.Close()

	currentFrame := gocv.NewMat()
	defer currentFrame.Close()
}

当我运行go build命令,然后执行./Test(因为文件位于Test目录中,所以这样命名)时,一切运行正常。但当我尝试构建另一个Go项目时,却遇到了以下问题:

pkg-config --cflags – opencv4

在pkg-config搜索路径中未找到opencv4包。 也许您应该将包含opencv4.pc的目录 添加到PKG_CONFIG_PATH环境变量中 未找到’opencv4’包 pkg-config: 退出状态1

注意:我在那个项目中使用了gocv

我不确定发生了什么。有什么建议吗?


更多关于Golang构建和运行可执行文件的完整指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang构建和运行可执行文件的完整指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


您遇到的问题是由于 gocv 包在构建时需要找到 OpenCV 的 pkg-config 文件(opencv4.pc),但系统无法定位该文件。这通常是因为 PKG_CONFIG_PATH 环境变量未正确设置,或者 OpenCV 安装时未生成 pkg-config 文件。

在您的第一个项目中,您通过 #cgo LDFLAGS 直接指定了 OpenCV 库的路径(如 -L/usr/local/lib),绕过了 pkg-config 机制。但在使用 gocv 包时,它内部依赖 pkg-config 来获取 OpenCV 的编译和链接标志。

以下是解决方案:

  1. 确认 opencv4.pc 文件是否存在:首先检查系统是否生成了该文件。通常,它位于 /usr/local/lib/pkgconfig//usr/lib/pkgconfig/ 目录下。运行以下命令:

    find /usr -name "opencv4.pc" 2>/dev/null
    

    如果找到文件,记下其路径(例如 /usr/local/lib/pkgconfig/opencv4.pc)。

  2. 设置 PKG_CONFIG_PATH 环境变量:将包含 opencv4.pc 的目录添加到 PKG_CONFIG_PATH。例如,如果文件在 /usr/local/lib/pkgconfig/,运行:

    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
    

    为了使此设置永久生效,可以将该行添加到您的 shell 配置文件(如 ~/.bashrc~/.zshrc)中,然后运行 source ~/.bashrc

  3. 验证 pkg-config 设置:运行以下命令检查是否成功:

    pkg-config --cflags opencv4
    

    如果输出类似 -I/usr/local/include/opencv4,则设置正确。

  4. 重新构建项目:在设置环境变量后,重新运行 go build 和您的可执行文件。

如果系统没有 opencv4.pc 文件,您可能需要重新安装 OpenCV 并确保启用 pkg-config 支持。例如,使用 Homebrew(在 macOS 上):

brew install opencv

或者从源码编译 OpenCV 时,使用 -D OPENCV_GENERATE_PKGCONFIG=ON 选项。

作为备选方案,您也可以像第一个项目那样,在 Go 代码中直接使用 #cgo 指令指定标志,但这可能需要对 gocv 包进行修改或寻找替代方法。例如:

/*
#cgo CFLAGS: -I/usr/local/include/opencv4
#cgo LDFLAGS: -L/usr/local/lib -lopencv_core -lopencv_video -lopencv_videoio -lopencv_highgui -lopencv_tracking -lopencv_optflow
*/
import "C"

但请注意,这可能需要手动管理所有依赖的 OpenCV 库。

完成上述步骤后,您的项目应该能正常构建和运行。

回到顶部