gpt4 book ai didi

c++ - Bazel 使用 OpenCV 3.3 依赖项构建

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:26 27 4
gpt4 key购买 nike

我正在尝试使用 Bazel 来编译和分发基于 OpenCV 的 C++ 代码,但我遇到了一个我无法解决的问题。

我在支持 CUDA (CUDA 8) 的 Ubuntu 16.04 LTS 上从源代码构建和安装 OpenCV 3.3。我将它安装在标准目录/usr/local 中。

鉴于此,我使用这个 WORKSPACE 文件创建了我的项目:

new_local_repository(
name = "opencv",
path = "/usr/local",
build_file = "opencv.BUILD",
)

opencv.BUILD 包含:

cc_library(
name = "opencv",
srcs = glob(["lib/*.so*"]),
hdrs = glob(["include/**/*.hpp"]),
includes = ["include"],
visibility = ["//visibility:public"],
linkstatic = 1,
)

我可以在我自己的代码中使用它:

cc_binary(
name = "main",
srcs = ["main.cc"],
deps = [
"@opencv//:opencv"
],
)

但是 OpenCV 中的一些源文件,如:

/usr/local/include/opencv2/flann/flann_base.hpp

includes headers file from the same directory, like :

#include "general.h"

当我用 Bazel 构建时,我得到这个错误:

ERROR: /home/damien/main/BUILD:1:1: C++ compilation of rule '//main:main' failed (Exit 1)
In file included from external/opencv/include/opencv2/flann.hpp:48:0,
from external/opencv/include/opencv2/opencv.hpp:62,
from main/main.cc:1:
external/opencv/include/opencv2/flann/flann_base.hpp:38:21: fatal error: general.h: No such file or directory

(general.h和flann_base.hpp在同一个目录)

如果我将#include 指令重写为:

#include "opencv2/flann/general.h"

它编译得很好。但这不是一个方便的解决方案。

所以我的问题是:有没有办法告诉 Bazel 在与该库中“当前”文件相同的目录中查找 header ?我查看了 Bazel 的每个 C++ 指令,但没有看到任何实现它的方法。

提前谢谢你。

最佳答案

好吧,真丢人。我必须导入 *.h :

cc_library(
name = "opencv",
srcs = glob(["lib/*.so*"]),
hdrs = glob(["include/**/*.hpp", "include/**/*.h"]),
includes = ["include"],
visibility = ["//visibility:public"],
linkstatic = 1,
)

关于c++ - Bazel 使用 OpenCV 3.3 依赖项构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46612343/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com