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
更多关于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 的编译和链接标志。
以下是解决方案:
-
确认 opencv4.pc 文件是否存在:首先检查系统是否生成了该文件。通常,它位于
/usr/local/lib/pkgconfig/或/usr/lib/pkgconfig/目录下。运行以下命令:find /usr -name "opencv4.pc" 2>/dev/null如果找到文件,记下其路径(例如
/usr/local/lib/pkgconfig/opencv4.pc)。 -
设置 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。 -
验证 pkg-config 设置:运行以下命令检查是否成功:
pkg-config --cflags opencv4如果输出类似
-I/usr/local/include/opencv4,则设置正确。 -
重新构建项目:在设置环境变量后,重新运行
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 库。
完成上述步骤后,您的项目应该能正常构建和运行。

