使用OpenCV 3.3依赖项构建Bazel
Bazel build with OpenCV 3.3 dependencies
我正试图使用Bazel编译和分发基于OpenCV的C++代码,但我遇到了一个无法解决的问题。
我在Ubuntu 16.04 LTS上从源代码构建并安装了OpenCV 3.3,支持CUDA(CUDA 8)。我将它安装在标准目录/usr/local中。
考虑到这一点,我用WORKSPACE文件创建了我的项目:
new_local_repository(
name = "opencv",
path = "/usr/local",
build_file = "opencv.BUILD",
)
露天电视。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/occv2/frann/flan_base.hpp
包括来自同一目录的头文件,如:
#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与flan_base.hpp在同一目录中)。
如果我将#include指令重写为:
#include "opencv2/flann/general.h"
它编译得很好。但这不是一个方便的解决方案。
所以我的问题是:有没有办法告诉Bazel在这个库中与"当前"文件相同的目录中查找头文件?我查看了Bazel的每一个C++指令,但我看不出有什么可以实现的
提前谢谢。
好吧,真遗憾。我必须导入*.h:
cc_library(
name = "opencv",
srcs = glob(["lib/*.so*"]),
hdrs = glob(["include/**/*.hpp", "include/**/*.h"]),
includes = ["include"],
visibility = ["//visibility:public"],
linkstatic = 1,
)
在我使用opencv4和Damien设置的情况下,我在包含highgui时出错。hpp:
external/opencv/include/opencv4/opencv2/highgui.hpp:46:10: fatal
error: opencv2/core.hpp: No such file or directory #include
"opencv2/core.hpp"
我可以修复它调整包括添加opencv4:
cc_library(
name = "opencv",
srcs = glob(["lib/*.so*"]),
hdrs = glob(["include/**/*.hpp", "include/**/*.h"]),
includes = ["include/opencv4"],
visibility = ["//visibility:public"],
linkstatic = 1,
)
相关文章:
- 使用Bazel构建具有不同编译器/链接器选项的C/C++依赖关系
- 如何在 Bazel 构建命令期间传递 FLAG 如 -DVERBOSE?
- 安装使用Bazel构建的库
- 使用Bazel构建Tensorflow
- 如何在bazel中使用make规则链接库构建
- 无法从 bazel 使用 boost/iostream 构建项目包
- 使用 bazel 构建的二进制文件在 pprof 中查看源代码
- Bazel 使用 ccache 构建C++示例失败
- 使用 bazel 构建 Makefile
- 使用Bazel构建系统构建具有循环依赖性的C++代码
- 使用 Bazel (Windows) 构建 Tensorflow 的问题 => 使用 Tensorflow C++ API
- Bazel 构建命令行将 copt 参数传递给特定的 cc_library/cc_binary?
- 访问使用 Bazel 构建的应用程序中的运行时文件
- 如何使用 Bazel 构建包含 openssl 的第三方 c++ 库
- 使用bazel和emscripten构建web组件
- 使用 bazel 从源代码构建张量流服务遇到错误:C++规则'@org_tensorflow//…'编译失败(出口 4)
- 如何巩固 Bazel 构建对象的顺序
- 在使用 bazel 构建一个简单的应用程序时,得到错误在 '/usr/lib/java/jdk1.8.0_74/bin/java' 找不到 java
- 可以在Visual Studio中使用Bazel构建代码
- 使用OpenCV 3.3依赖项构建Bazel