使用rules_foreign_cc构建OpenCV

huangapple go评论99阅读模式
英文:

Building OpenCV with rules_foreign_cc

问题

我想用Bazel在C++中开始一个新项目。为了构建OpenCV,我想使用foreign_rules_cc。

我已经按照一些教程进行了操作,但是我无法成功构建OpenCV。

这是我的WORKSPACE文件:

  1. workspace(name = "rules_foreign_cc_usage_example")
  2. load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
  3. # Rule repository, note that it's recommended to use a pinned commit to a released version of the rules
  4. http_archive(
  5. name = "rules_foreign_cc",
  6. sha256 = "2a4d07cd64b0719b39a7c12218a3e507672b82a97b98c6a89d38565894cf7c51",
  7. strip_prefix = "rules_foreign_cc-0.9.0",
  8. url = "https://github.com/bazelbuild/rules_foreign_cc/archive/refs/tags/0.9.0.tar.gz",
  9. )
  10. load("@rules_foreign_cc//foreign_cc:repositories.bzl", "rules_foreign_cc_dependencies")
  11. # This sets up some common toolchains for building targets. For more details, please see
  12. # https://github.com/bazelbuild/rules_foreign_cc/tree/main/docs#rules_foreign_cc_dependencies
  13. rules_foreign_cc_dependencies()
  14. _OPENCV_CONTENT = """
  15. filegroup(
  16. name = "all_srcs",
  17. srcs = glob(["**"]),
  18. visibility = ["//visibility:public"],
  19. )
  20. """
  21. http_archive(
  22. name = "opencv",
  23. build_file_content = _OPENCV_CONTENT,
  24. url = "https://github.com/opencv/opencv/archive/refs/tags/4.8.0.tar.gz",
  25. strip_prefix = "opencv-4.8.0",
  26. )

这是我在thirdparty目录下的BUILD.bazel文件:

  1. load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")
  2. cmake(
  3. name = "libopencv",
  4. generate_args = [
  5. "-DBUILD_LIST=core,highgui,imgcodecs,imgproc",
  6. "-DBUILD_ZLIB=OFF",
  7. ],
  8. lib_source = "@opencv//:all_srcs",
  9. )
  10. filegroup(
  11. name = "opencv",
  12. srcs = [":libopencv"],
  13. visibility = ["//visibility:public"],
  14. )

我得到的错误是:

  1. bazel build --explain=opencv.log --verbose_explanations //thirdparty:opencv
  2. INFO: Analyzed target //thirdparty:opencv (49 packages loaded, 15164 targets configured).
  3. INFO: Found 1 target...
  4. INFO: Writing explanation of rebuilds to 'opencv.log'
  5. ERROR: /Users/name/Code/Git/AimTracker/C/thirdparty/BUILD.bazel:2:6: output 'thirdparty/libopencv/lib/libopencv.a' was not created
  6. ERROR: /Users/name/Code/Git/AimTracker/C/thirdparty/BUILD.bazel:2:6: Foreign Cc - CMake: Building libopencv failed: not all outputs were created or valid
  7. Target //thirdparty:opencv failed to build
  8. Use --verbose_failures to see the command lines of failed build steps.
  9. INFO: Elapsed time: 292.206s, Critical Path: 290.73s
  10. INFO: 7 processes: 5 internal, 2 darwin-sandbox.
  11. FAILED: Build did NOT complete successfully

如果我克隆OpenCV,运行以下命令:

  1. cmake -DBUILD_ZLIB=OFF -DBUILD_LIST=core,highgui,imgcodecs,imgproc ..
  2. make

它可以顺利编译。

更新

对于Mac,我按照下面的答案进行了一些更新:

  1. load("@rules_cc//cc:defs.bzl", "cc_library")
  2. load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")
  3. cc_library(
  4. name = "opencv_deps",
  5. linkopts = [
  6. "-ldl",
  7. "-lz",
  8. "-lpthread",
  9. "-lavutil",
  10. "-lavformat",
  11. "-lavcodec",
  12. "-lswscale",
  13. "-L/opt/homebrew/opt/ffmpeg/lib",
  14. "-L/opt/homebrew/Cellar/libx11/1.8.6/lib",
  15. "-framework Cocoa",
  16. "-framework Accelerate",
  17. ],
  18. )
  19. cmake(
  20. name = "opencv",
  21. build_args = [
  22. "-j16",
  23. ],
  24. cache_entries = {
  25. "OPENCV_FORCE_3RDPARTY_BUILD": "ON",
  26. "BUILD_SHARED_LIBS": "OFF",
  27. "BUILD_TESTS": "OFF",
  28. "BUILD_PERF_TESTS": "OFF",
  29. "BUILD_opencv_apps": "OFF",
  30. "BUILD_opencv_calib3d": "OFF",
  31. "BUILD_opencv_core": "ON",
  32. "BUILD_opencv_dnn": "OFF",
  33. "BUILD_opencv_features2d": "OFF",
  34. "BUILD_opencv_flann": "OFF",
  35. "BUILD_opencv_gapi": "OFF",
  36. "BUILD_opencv_highgui": "ON",
  37. "BUILD_opencv_imgcodecs": "ON",
  38. "BUILD_opencv_imgproc": "ON",
  39. "BUILD_opencv_java_bindings_generator": "OFF",
  40. "BUILD_opencv_js": "OFF",
  41. "BUILD_opencv_ml": "OFF",
  42. "BUILD_opencv_objdetect": "OFF",
  43. "BUILD_opencv_photo": "OFF",
  44. "BUILD_opencv_python_bindings_generator": "OFF",
  45. "BUILD_opencv_stitching": "OFF",
  46. "BUILD_opencv_ts": "OFF",
  47. "BUILD_opencv_video": "OFF",
  48. "BUILD_opencv_videoio": "ON",
  49. "BUILD_opencv_world": "ON",
  50. "BUILD_IPP_IW": "ON",
  51. "WITH_ADE": "OFF",
  52. "WITH_CAROTENE": "OFF",
  53. "WITH_IPP": "OFF",
  54. "WITH_ITT": "ON",
  55. "WITH_OPENEXR": "OFF",
  56. "WITH_JASPER": "OFF",
  57. "WITH_JPEG": "OFF",
  58. "WITH_OPENJPEG": "ON",
  59. "WITH_TIFF": "OFF",
  60. "WITH_WEBP": "ON",
  61. "WITH_QUIRC": "ON",
  62. "WITH_GTK": "OFF",
  63. "WITH_OPENBLAS": "ON",
  64. "WITH_OPENCL": "OFF",
  65. },
  66. env = {
  67. "CMAKE_BUILD_TYPE": "Release",
  68. "CMAKE_BUILD_PARALLEL_LEVEL": "16",
  69. },
  70. lib_source = "@opencv//:all",
  71. out_include_dir = "include/opencv4",
  72. out_static_libs = [
  73. "libopencv_world.a",
  74. "opencv4/3rdparty/libittnotify.a",
  75. "opencv4/3rdparty/liblibopenjp2.a",
  76. "opencv4/3rdparty/liblibwebp.a",
  77. "opencv4/3rdparty/liblibpng.a",
  78. ],
  79. targets = [
  80. "install",
  81. ],
  82. visibility = ["//visibility:public"],
  83. deps = [":opencv_deps"],
  84. )
英文:

I want to start a new project in C++ with Bazel. To build OpenCV I want to use foreign_rules_cc.

I have followed some tutorials, but I have not been able to build opencv successfully.

This is my WORKSPACE:

  1. workspace(name = "rules_foreign_cc_usage_example")
  2. load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
  3. # Rule repository, note that it's recommended to use a pinned commit to a released version of the rules
  4. http_archive(
  5. name = "rules_foreign_cc",
  6. sha256 = "2a4d07cd64b0719b39a7c12218a3e507672b82a97b98c6a89d38565894cf7c51",
  7. strip_prefix = "rules_foreign_cc-0.9.0",
  8. url = "https://github.com/bazelbuild/rules_foreign_cc/archive/refs/tags/0.9.0.tar.gz",
  9. )
  10. load("@rules_foreign_cc//foreign_cc:repositories.bzl", "rules_foreign_cc_dependencies")
  11. # This sets up some common toolchains for building targets. For more details, please see
  12. # https://github.com/bazelbuild/rules_foreign_cc/tree/main/docs#rules_foreign_cc_dependencies
  13. rules_foreign_cc_dependencies()
  14. _OPENCV_CONTENT = """\
  15. filegroup(
  16. name = "all_srcs",
  17. srcs = glob(["**"]),
  18. visibility = ["//visibility:public"],
  19. )
  20. """
  21. http_archive(
  22. name = "opencv",
  23. build_file_content = _OPENCV_CONTENT,
  24. url = "https://github.com/opencv/opencv/archive/refs/tags/4.8.0.tar.gz",
  25. strip_prefix = "opencv-4.8.0",
  26. )

This is my BUILD.bazel in the directory thirdparty:

  1. load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")
  2. cmake(
  3. name = "libopencv",
  4. generate_args = [
  5. "-DBUILD_LIST=core,highgui,imgcodecs,imgproc",
  6. "-DBUILD_ZLIB=OFF",
  7. ],
  8. lib_source = "@opencv//:all_srcs",
  9. )
  10. filegroup(
  11. name = "opencv",
  12. srcs = [":libopencv"],
  13. visibility = ["//visibility:public"],
  14. )

The error I get is

  1. bazel build --explain=opencv.log --verbose_explanations //thirdparty:opencv
  2. INFO: Analyzed target //thirdparty:opencv (49 packages loaded, 15164 targets configured).
  3. INFO: Found 1 target...
  4. INFO: Writing explanation of rebuilds to 'opencv.log'
  5. ERROR: /Users/name/Code/Git/AimTracker/C/thirdparty/BUILD.bazel:2:6: output 'thirdparty/libopencv/lib/libopencv.a' was not created
  6. ERROR: /Users/name/Code/Git/AimTracker/C/thirdparty/BUILD.bazel:2:6: Foreign Cc - CMake: Building libopencv failed: not all outputs were created or valid
  7. Target //thirdparty:opencv failed to build
  8. Use --verbose_failures to see the command lines of failed build steps.
  9. INFO: Elapsed time: 292.206s, Critical Path: 290.73s
  10. INFO: 7 processes: 5 internal, 2 darwin-sandbox.
  11. FAILED: Build did NOT complete successfully

If I clone OpenCV, run

  1. cmake -DBUILD_ZLIB=OFF -DBUILD_LIST=core,highgui,imgcodecs,imgproc ..
  2. make

it compiles without any problems.

UPDATE

For Mac I followed the accepted answer below with some updates:

  1. load("@rules_cc//cc:defs.bzl", "cc_library")
  2. load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")
  3. cc_library(
  4. name = "opencv_deps",
  5. linkopts = [
  6. "-ldl",
  7. "-lz",
  8. "-lpthread",
  9. "-lavutil",
  10. "-lavformat",
  11. "-lavcodec",
  12. "-lswscale",
  13. "-L/opt/homebrew/opt/ffmpeg/lib",
  14. "-L/opt/homebrew/Cellar/libx11/1.8.6/lib",
  15. "-framework Cocoa",
  16. "-framework Accelerate",
  17. ],
  18. )
  19. cmake(
  20. name = "opencv",
  21. build_args = [
  22. "-j16",
  23. ],
  24. cache_entries = {
  25. "OPENCV_FORCE_3RDPARTY_BUILD": "ON",
  26. "BUILD_SHARED_LIBS": "OFF",
  27. "BUILD_TESTS": "OFF",
  28. "BUILD_PERF_TESTS": "OFF",
  29. "BUILD_opencv_apps": "OFF",
  30. "BUILD_opencv_calib3d": "OFF",
  31. "BUILD_opencv_core": "ON",
  32. "BUILD_opencv_dnn": "OFF",
  33. "BUILD_opencv_features2d": "OFF",
  34. "BUILD_opencv_flann": "OFF",
  35. "BUILD_opencv_gapi": "OFF",
  36. "BUILD_opencv_highgui": "ON",
  37. "BUILD_opencv_imgcodecs": "ON",
  38. "BUILD_opencv_imgproc": "ON",
  39. "BUILD_opencv_java_bindings_generator": "OFF",
  40. "BUILD_opencv_js": "OFF",
  41. "BUILD_opencv_ml": "OFF",
  42. "BUILD_opencv_objdetect": "OFF",
  43. "BUILD_opencv_photo": "OFF",
  44. "BUILD_opencv_python_bindings_generator": "OFF",
  45. "BUILD_opencv_stitching": "OFF",
  46. "BUILD_opencv_ts": "OFF",
  47. "BUILD_opencv_video": "OFF",
  48. "BUILD_opencv_videoio": "ON",
  49. "BUILD_opencv_world": "ON",
  50. "BUILD_IPP_IW": "ON",
  51. "WITH_ADE": "OFF",
  52. "WITH_CAROTENE": "OFF",
  53. "WITH_IPP": "OFF",
  54. "WITH_ITT": "ON",
  55. "WITH_OPENEXR": "OFF",
  56. "WITH_JASPER": "OFF",
  57. "WITH_JPEG": "OFF",
  58. "WITH_OPENJPEG": "ON",
  59. "WITH_TIFF": "OFF",
  60. "WITH_WEBP": "ON",
  61. "WITH_QUIRC": "ON",
  62. "WITH_GTK": "OFF",
  63. "WITH_OPENBLAS": "ON",
  64. "WITH_OPENCL": "OFF",
  65. },
  66. env = {
  67. "CMAKE_BUILD_TYPE": "Release",
  68. "CMAKE_BUILD_PARALLEL_LEVEL": "16",
  69. },
  70. lib_source = "@opencv//:all",
  71. out_include_dir = "include/opencv4",
  72. out_static_libs = [
  73. "libopencv_world.a",
  74. "opencv4/3rdparty/libittnotify.a",
  75. "opencv4/3rdparty/liblibopenjp2.a",
  76. "opencv4/3rdparty/liblibwebp.a",
  77. "opencv4/3rdparty/liblibpng.a",
  78. ],
  79. targets = [
  80. "install",
  81. ],
  82. visibility = ["//visibility:public"],
  83. deps = [":opencv_deps"],
  84. )

答案1

得分: 1

另一种方法是不使用rules_foreign_cc。这在我以前使用Windows上的Visual Studio时对我有效:

WORKSPACE.bazel

  1. workspace(name = "OpenCVDemo")
  2. load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
  3. # OpenCV
  4. http_archive(
  5. name = "opencv",
  6. build_file = "//third_party:opencv.BUILD",
  7. strip_prefix = "opencv/build",
  8. # Debug
  9. #url = "http://vertexwahn.de/artifacts/opencv-4.3.0-dldt-2020.2-vc16-avx2-debug.zip",
  10. #sha256 = "9bcd2dda258e67ad2ddef7768f1c9b2afcc68cd4b9d9f5c9b841ea3ee47f9d4c",
  11. # Release
  12. url = "https://github.com/opencv/opencv/releases/download/4.3.0/opencv-4.3.0-dldt-2020.2-vc16-avx2.zip",
  13. )

third_party/opencv.BUILD

  1. package(default_visibility = ["//visibility:public"])
  2. MAIN_MODULES = [
  3. "core",
  4. "imgproc",
  5. "imgcodecs",
  6. "videoio",
  7. "highgui",
  8. "video",
  9. "calib3d",
  10. "features2d",
  11. "objdetect",
  12. "dnn",
  13. "ml",
  14. "flann",
  15. "photo",
  16. "stitching",
  17. "gapi",
  18. ]
  19. # https://stackoverflow.com/questions/56108940/how-to-specify-the-compiler-flags-to-be-used-in-opt-compilation-mode-by-my-own
  20. config_setting(
  21. name = "fastbuild_mode",
  22. values = {"compilation_mode": "fastbuild"},
  23. )
  24. config_setting(
  25. name = "dbg_mode",
  26. values = {"compilation_mode": "dbg"},
  27. )
  28. cc_import(
  29. name = "tbb",
  30. shared_library = select({
  31. ":fastbuild_mode": "bin/tbb.dll",
  32. ":dbg_mode": "bin/tbb_debug.dll",
  33. "//conditions:default": "bin/tbb.dll",
  34. }),
  35. )
  36. [
  37. (
  38. cc_import(
  39. name = module,
  40. interface_library = select({
  41. ":fastbuild_mode": "lib/opencv_{}430.lib".format(module),
  42. ":dbg_mode": "lib/opencv_{}430d.lib".format(module),
  43. "//conditions:default": "lib/opencv_{}430.lib".format(module),
  44. }),
  45. shared_library = select({
  46. ":fastbuild_mode": "bin/opencv_{}430.dll".format(module),
  47. ":dbg_mode": "bin/opencv_{}430d.dll".format(module),
  48. "//conditions:default": "bin/opencv_{}430.dll".format(module),
  49. }),
  50. )
  51. )
  52. for module in MAIN_MODULES
  53. ]
  54. cc_library(
  55. name = "opencv",
  56. hdrs = [
  57. "include/opencv2/calib3d.hpp",
  58. "include/opencv2/calib3d/calib3d.hpp",
  59. "include/opencv2/calib3d/calib3d_c.h",
  60. "include/opencv2/core.hpp",
  61. "include/opencv2/core/hal/interface.h",
  62. "include/opencv2/cvconfig.h",
  63. "include/opencv2/dnn.hpp",
  64. "include/opencv2/features2d.hpp",
  65. "include/opencv2/flann.hpp",
  66. "include/opencv2/flann/config.h",
  67. "include/opencv2/flann/defines.h",
  68. "include/opencv2/flann/miniflann.hpp",
  69. "include/opencv2/highgui.hpp",
  70. "include/opencv2/highgui/highgui.hpp",
  71. "include/opencv2/highgui/highgui_c.h",
  72. "include/opencv2/imgcodecs.hpp",
  73. "include/opencv2/imgproc.hpp",
  74. "include/opencv2/ml.hpp",
  75. "include/opencv2/ml/ml.inl.hpp",
  76. "include/opencv2/objdetect.hpp",
  77. "include/opencv2/opencv.hpp",
  78. "include/opencv2/opencv_modules.hpp",
  79. "include/opencv2/photo.hpp",
  80. "include/opencv2/stitching.hpp",
  81. "include/opencv2/video.hpp",
  82. "include/opencv2/video/background_segm.hpp",
  83. "include/opencv2/video/tracking.hpp",
  84. "include/opencv2/videoio.hpp",
  85. "include/opencv2/videoio/videoio_c.h",
  86. ],
  87. includes = ["include"],
  88. deps = MAIN_MODULES + [
  89. "tbb",
  90. ],
  91. )

third_party/BUILD.bazel

  1. # empty by intend

BUILD.bazel

  1. cc_binary(
  2. name = "OpenCVDemo",
  3. srcs = ["main.cpp"],
  4. deps = ["@opencv"],
  5. )
英文:

One another approach is not to use rules_foreign_cc. This worked for me in the past with Visual Studio on Windows:

WORKSPACE.bazel:

  1. workspace(name = "OpenCVDemo")
  2. load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
  3. # OpenCV
  4. http_archive(
  5. name = "opencv",
  6. build_file = "//third_party:opencv.BUILD",
  7. strip_prefix = "opencv/build",
  8. # Debug
  9. #url = "http://vertexwahn.de/artifacts/opencv-4.3.0-dldt-2020.2-vc16-avx2-debug.zip",
  10. #sha256 = "9bcd2dda258e67ad2ddef7768f1c9b2afcc68cd4b9d9f5c9b841ea3ee47f9d4c",
  11. # Release
  12. url = "https://github.com/opencv/opencv/releases/download/4.3.0/opencv-4.3.0-dldt-2020.2-vc16-avx2.zip",
  13. )

third_party/opencv.BUILD:

  1. package(default_visibility = ["//visibility:public"])
  2. MAIN_MODULES = [
  3. "core",
  4. "imgproc",
  5. "imgcodecs",
  6. "videoio",
  7. "highgui",
  8. "video",
  9. "calib3d",
  10. "features2d",
  11. "objdetect",
  12. "dnn",
  13. "ml",
  14. "flann",
  15. "photo",
  16. "stitching",
  17. "gapi",
  18. ]
  19. # https://stackoverflow.com/questions/56108940/how-to-specify-the-compiler-flags-to-be-used-in-opt-compilation-mode-by-my-own
  20. config_setting(
  21. name = "fastbuild_mode",
  22. values = {"compilation_mode": "fastbuild"},
  23. )
  24. config_setting(
  25. name = "dbg_mode",
  26. values = {"compilation_mode": "dbg"},
  27. )
  28. cc_import(
  29. name = "tbb",
  30. shared_library = select({
  31. ":fastbuild_mode": "bin/tbb.dll",
  32. ":dbg_mode": "bin/tbb_debug.dll",
  33. "//conditions:default": "bin/tbb.dll",
  34. }),
  35. )
  36. [
  37. (
  38. cc_import(
  39. name = module,
  40. interface_library = select({
  41. ":fastbuild_mode": "lib/opencv_{}430.lib".format(module),
  42. ":dbg_mode": "lib/opencv_{}430d.lib".format(module),
  43. "//conditions:default": "lib/opencv_{}430.lib".format(module),
  44. }),
  45. shared_library = select({
  46. ":fastbuild_mode": "bin/opencv_{}430.dll".format(module),
  47. ":dbg_mode": "bin/opencv_{}430d.dll".format(module),
  48. "//conditions:default": "bin/opencv_{}430.dll".format(module),
  49. }),
  50. )
  51. )
  52. for module in MAIN_MODULES
  53. ]
  54. cc_library(
  55. name = "opencv",
  56. hdrs = [
  57. "include/opencv2/calib3d.hpp",
  58. "include/opencv2/calib3d/calib3d.hpp",
  59. "include/opencv2/calib3d/calib3d_c.h",
  60. "include/opencv2/core.hpp",
  61. "include/opencv2/core/hal/interface.h",
  62. "include/opencv2/cvconfig.h",
  63. "include/opencv2/dnn.hpp",
  64. "include/opencv2/features2d.hpp",
  65. "include/opencv2/flann.hpp",
  66. "include/opencv2/flann/config.h",
  67. "include/opencv2/flann/defines.h",
  68. "include/opencv2/flann/miniflann.hpp",
  69. "include/opencv2/highgui.hpp",
  70. "include/opencv2/highgui/highgui.hpp",
  71. "include/opencv2/highgui/highgui_c.h",
  72. "include/opencv2/imgcodecs.hpp",
  73. "include/opencv2/imgproc.hpp",
  74. "include/opencv2/ml.hpp",
  75. "include/opencv2/ml/ml.inl.hpp",
  76. "include/opencv2/objdetect.hpp",
  77. "include/opencv2/opencv.hpp",
  78. "include/opencv2/opencv_modules.hpp",
  79. "include/opencv2/photo.hpp",
  80. "include/opencv2/stitching.hpp",
  81. "include/opencv2/video.hpp",
  82. "include/opencv2/video/background_segm.hpp",
  83. "include/opencv2/video/tracking.hpp",
  84. "include/opencv2/videoio.hpp",
  85. "include/opencv2/videoio/videoio_c.h",
  86. ],
  87. includes = ["include"],
  88. deps = MAIN_MODULES + [
  89. "tbb",
  90. ],
  91. )

third_party/BUILD.bazel

  1. # empty by intend

BUILD.bazel:

  1. cc_binary(
  2. name = "OpenCVDemo",
  3. srcs = ["main.cpp"],
  4. deps = ["@opencv"],
  5. )

答案2

得分: 0

这是一个在Ubuntu 22.04上工作的BUILD文件示例(至少对我而言)。

  1. load("@rules_cc//cc:defs.bzl", "cc_library")
  2. load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")
  3. cc_library(
  4. name = "opencv_deps",
  5. linkopts = [
  6. "-ldl",
  7. "-lz",
  8. "-lpthread",
  9. "-ldc1394",
  10. "-lavutil",
  11. "-lavformat",
  12. "-lavcodec",
  13. "-lswscale",
  14. ],
  15. )
  16. cmake(
  17. name = "opencv",
  18. build_args = [
  19. "-j16",
  20. ],
  21. cache_entries = {
  22. "OPENCV_FORCE_3RDPARTY_BUILD": "ON",
  23. "BUILD_SHARED_LIBS": "OFF",
  24. "BUILD_TESTS": "OFF",
  25. "BUILD_PERF_TESTS": "OFF",
  26. "BUILD_opencv_apps": "OFF",
  27. "BUILD_opencv_calib3d": "OFF",
  28. "BUILD_opencv_core": "ON",
  29. "BUILD_opencv_dnn": "OFF",
  30. "BUILD_opencv_features2d": "OFF",
  31. "BUILD_opencv_flann": "OFF",
  32. "BUILD_opencv_gapi": "OFF",
  33. "BUILD_opencv_highgui": "ON",
  34. "BUILD_opencv_imgcodecs": "ON",
  35. "BUILD_opencv_imgproc": "ON",
  36. "BUILD_opencv_java_bindings_generator": "OFF",
  37. "BUILD_opencv_js": "OFF",
  38. "BUILD_opencv_ml": "OFF",
  39. "BUILD_opencv_objdetect": "OFF",
  40. "BUILD_opencv_photo": "OFF",
  41. "BUILD_opencv_python_bindings_generator": "OFF",
  42. "BUILD_opencv_stitching": "OFF",
  43. "BUILD_opencv_ts": "OFF",
  44. "BUILD_opencv_video": "OFF",
  45. "BUILD_opencv_videoio": "ON",
  46. "BUILD_opencv_world": "ON",
  47. "BUILD_IPP_IW": "ON",
  48. "WITH_ADE": "OFF",
  49. "WITH_CAROTENE": "OFF",
  50. "WITH_IPP": "OFF",
  51. "WITH_ITT": "ON",
  52. "WITH_OPENEXR": "OFF",
  53. "WITH_JASPER": "OFF",
  54. "WITH_JPEG": "OFF",
  55. "WITH_OPENJPEG": "ON",
  56. "WITH_TIFF": "OFF",
  57. "WITH_WEBP": "ON",
  58. "WITH_QUIRC": "ON",
  59. "WITH_GTK": "OFF",
  60. },
  61. env = {
  62. "CMAKE_BUILD_TYPE": "Release",
  63. "CMAKE_BUILD_PARALLEL_LEVEL": "16",
  64. },
  65. lib_source = "@opencv//:all",
  66. out_include_dir = "include/opencv4",
  67. out_static_libs = [
  68. "libopencv_world.a",
  69. "opencv4/3rdparty/libittnotify.a",
  70. "opencv4/3rdparty/liblibopenjp2.a",
  71. "opencv4/3rdparty/liblibwebp.a",
  72. "opencv4/3rdparty/liblibpng.a",
  73. ],
  74. targets = [
  75. "install",
  76. ],
  77. visibility = ["//visibility:public"],
  78. deps = [":opencv_deps"],
  79. )

WORKSPACE代码片段:

  1. all_content = """filegroup(
  2. name = "all",
  3. srcs = glob(["**"]),
  4. visibility = ["//visibility:public"]
  5. )
  6. """
  7. http_archive(
  8. name = "rules_foreign_cc",
  9. sha256 = "2a4d07cd64b0719b39a7c12218a3e507672b82a97b98c6a89d38565894cf7c51",
  10. strip_prefix = "rules_foreign_cc-0.9.0",
  11. url = "https://github.com/bazelbuild/rules_foreign_cc/archive/refs/tags/0.9.0.tar.gz",
  12. )
  13. load("@rules_foreign_cc//foreign_cc:repositories.bzl", "rules_foreign_cc_dependencies")
  14. rules_foreign_cc_dependencies()
  15. http_archive(
  16. name = "opencv",
  17. build_file_content = all_content,
  18. sha256 = "a61e7a4618d353140c857f25843f39b2abe5f451b018aab1604ef0bc34cd23d5",
  19. strip_prefix = "opencv-4.5.3",
  20. urls = [
  21. "https://github.com/opencv/opencv/archive/4.5.3.zip",
  22. ],
  23. )

希望对你有所帮助!

英文:

Here is my BUILD file that works (at least for me) with ubuntu 22.04.

  1. load("@rules_cc//cc:defs.bzl", "cc_library")
  2. load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")
  3. cc_library(
  4. name = "opencv_deps",
  5. linkopts = [
  6. "-ldl",
  7. "-lz",
  8. "-lpthread",
  9. "-ldc1394",
  10. "-lavutil",
  11. "-lavformat",
  12. "-lavcodec",
  13. "-lswscale",
  14. ],
  15. )
  16. cmake(
  17. name = "opencv",
  18. build_args = [
  19. "-j16",
  20. ],
  21. cache_entries = {
  22. "OPENCV_FORCE_3RDPARTY_BUILD": "ON",
  23. "BUILD_SHARED_LIBS": "OFF",
  24. "BUILD_TESTS": "OFF",
  25. "BUILD_PERF_TESTS": "OFF",
  26. "BUILD_opencv_apps": "OFF",
  27. "BUILD_opencv_calib3d": "OFF",
  28. "BUILD_opencv_core": "ON",
  29. "BUILD_opencv_dnn": "OFF",
  30. "BUILD_opencv_features2d": "OFF",
  31. "BUILD_opencv_flann": "OFF",
  32. "BUILD_opencv_gapi": "OFF",
  33. "BUILD_opencv_highgui": "ON",
  34. "BUILD_opencv_imgcodecs": "ON",
  35. "BUILD_opencv_imgproc": "ON",
  36. "BUILD_opencv_java_bindings_generator": "OFF",
  37. "BUILD_opencv_js": "OFF",
  38. "BUILD_opencv_ml": "OFF",
  39. "BUILD_opencv_objdetect": "OFF",
  40. "BUILD_opencv_photo": "OFF",
  41. "BUILD_opencv_python_bindings_generator": "OFF",
  42. "BUILD_opencv_stitching": "OFF",
  43. "BUILD_opencv_ts": "OFF",
  44. "BUILD_opencv_video": "OFF",
  45. "BUILD_opencv_videoio": "ON",
  46. "BUILD_opencv_world": "ON",
  47. "BUILD_IPP_IW": "ON",
  48. "WITH_ADE": "OFF",
  49. "WITH_CAROTENE": "OFF",
  50. "WITH_IPP": "OFF",
  51. "WITH_ITT": "ON",
  52. "WITH_OPENEXR": "OFF",
  53. "WITH_JASPER": "OFF",
  54. "WITH_JPEG": "OFF",
  55. "WITH_OPENJPEG": "ON",
  56. "WITH_TIFF": "OFF",
  57. "WITH_WEBP": "ON",
  58. "WITH_QUIRC": "ON",
  59. "WITH_GTK": "OFF",
  60. },
  61. env = {
  62. "CMAKE_BUILD_TYPE": "Release",
  63. "CMAKE_BUILD_PARALLEL_LEVEL": "16",
  64. },
  65. lib_source = "@opencv//:all",
  66. out_include_dir = "include/opencv4",
  67. out_static_libs = [
  68. "libopencv_world.a",
  69. "opencv4/3rdparty/libittnotify.a",
  70. "opencv4/3rdparty/liblibopenjp2.a",
  71. "opencv4/3rdparty/liblibwebp.a",
  72. "opencv4/3rdparty/liblibpng.a",
  73. ],
  74. targets = [
  75. "install",
  76. ],
  77. visibility = ["//visibility:public"],
  78. deps = [":opencv_deps"],
  79. )

WORKSPACE snippet:

  1. all_content = """filegroup(
  2. name = "all",
  3. srcs = glob(["**"]),
  4. visibility = ["//visibility:public"]
  5. )
  6. """
  7. http_archive(
  8. name = "rules_foreign_cc",
  9. sha256 = "2a4d07cd64b0719b39a7c12218a3e507672b82a97b98c6a89d38565894cf7c51",
  10. strip_prefix = "rules_foreign_cc-0.9.0",
  11. url = "https://github.com/bazelbuild/rules_foreign_cc/archive/refs/tags/0.9.0.tar.gz",
  12. )
  13. load("@rules_foreign_cc//foreign_cc:repositories.bzl", "rules_foreign_cc_dependencies")
  14. rules_foreign_cc_dependencies()
  15. http_archive(
  16. name = "opencv",
  17. build_file_content = all_content,
  18. sha256 = "a61e7a4618d353140c857f25843f39b2abe5f451b018aab1604ef0bc34cd23d5",
  19. strip_prefix = "opencv-4.5.3",
  20. urls = [
  21. "https://github.com/opencv/opencv/archive/4.5.3.zip",
  22. ],
  23. )

huangapple
  • 本文由 发表于 2023年7月27日 15:22:21
  • 转载请务必保留本文链接:https://go.coder-hub.com/76777350.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定