首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >问:如何使用“brew”为Swift软件包目标依赖提供C系统库?

问:如何使用“brew”为Swift软件包目标依赖提供C系统库?
EN

Stack Overflow用户
提问于 2021-05-28 04:43:56
回答 1查看 408关注 0票数 0

如何使用SystemPackageProvider.brew(…)为Swift包目标依赖提供C/C++系统库?

经过一番研究后,以下几点似乎应该奏效:

代码语言:javascript
复制
// swift-tools-version:5.4

import PackageDescription

let package = Package(
    name: "JustOpenCV",
    dependencies: [ ],
    targets: [
        .executableTarget(
            name: "JustOpenCV",
            dependencies: ["opencv"]),
        .testTarget(
            name: "JustOpenCVTests",
            dependencies: ["JustOpenCV"]),
        .systemLibrary(name: "opencv",
            pkgConfig: "opencv",
            providers: [ .apt(["opencv-dev"]), .brew(["opencv"]) ])
    ],
    cxxLanguageStandard: CXXLanguageStandard.cxx14
)

注意:库已经通过brew install opencv安装。

但是,以下错误发生在…

错误:目标opencv的源文件应该位于“Source /opencv”下面,或者可以使用Package.swift中的“path”属性设置自定义源路径

这两种建议的错误补救措施都意味着不使用SystemPackageProvider。是否有一种方法可以将SystemPackageProvider用于已安装的自制库?

存储库:JustOpenCV

EN

回答 1

Stack Overflow用户

发布于 2021-06-13 18:09:25

我正在考虑将支持添加到许多C和C++库中,因此我想尝试一下。在命中了许多死胡同之后,我终于能够通过创建一个基于这是我偶然遇到的的模块地图来构建它。

您可以在此承诺中看到对示例项目的相关更改。

Package.swift

代码语言:javascript
复制
// swift-tools-version:5.4

import PackageDescription

let package = Package(
    name: "JustOpenCV",
    targets: [
        .executableTarget(
            name: "JustOpenCV",
            dependencies: ["opencv"]
        ),
        .testTarget(
            name: "JustOpenCVTests",
            dependencies: ["JustOpenCV"]
        ),
        .systemLibrary(
            name: "opencv",
            pkgConfig: "opencv4",
            providers: [
                .apt(["opencv-dev"]),
                .brew(["opencv"])
            ]
        )
    ],
    cxxLanguageStandard: CXXLanguageStandard.cxx14
)

需要注意的一点是,pkg-config文件实际上名为opencv4。这个名字可以用pkg-config确认。

代码语言:javascript
复制
> pkg-config --list-all
...
opencv4                             OpenCV - Open Source Computer Vision Library
...
代码语言:javascript
复制
> pkg-config --cflags opencv4
-I/usr/local/Cellar/opencv/4.5.2_4/include/opencv4

来源/opencv/module.Modemap

代码语言:javascript
复制
module opencv [system] {
  umbrella header "opencv2/opencv.hpp"
  link "opencv_core"
  link "opencv_shape"
  link "opencv_dnn"
  link "opencv_ml"
  link "opencv_objdetect"
  link "opencv_stitching"
  link "opencv_superres"
  link "opencv_videostab"
  link "opencv_calib3d"
  link "opencv_features2d"
  link "opencv_highgui"
  link "opencv_videoio"
  link "opencv_imgcodecs"
  link "opencv_video"
  link "opencv_photo"
  link "opencv_imgproc"
  link "opencv_flann"
  export *
}

值得注意的是,所有的图书馆都必须链接。

构建和运行

代码语言:javascript
复制
> swift build
[1/1] Planning build

ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_gapi.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_stitching.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_alphamat.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_aruco.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_bgsegm.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_bioinspired.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_ccalib.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_dnn_objdetect.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_dnn_superres.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_dpm.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_face.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_freetype.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_fuzzy.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_hfs.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_img_hash.dylib) was built for newer macOS version (11.0) than being linked (10.10)

ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_line_descriptor.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_mcc.dylib) was built for newer macOS version (11.0) than being linked (10.10)

ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_rapid.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_reg.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_rgbd.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_sfm.dylib) was built for newer macOS version (11.0) than being linked (10.10)
dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_saliency.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_stereo.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_phase_unwrapping.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_structured_light.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_optflow.dylib) was built for newer macOS version (11.0) than being linked (10.10)

ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_tracking.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_surface_matching.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_datasets.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_highgui.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_text.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_videostab.dylib) was built for newer macOS version (11.0) than being linked (10.10)
dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_plot.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_videoio.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_wechat_qrcode.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_viz.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_xfeatures2d.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_shape.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_ml.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_video.dylib) was built for newer macOS version (11.0) than being linked (10.10)

ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_dnn.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_xobjdetect.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_calib3d.dylib) was built for newer macOS version (11.0) than being linked (10.10)

ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_imgcodecs.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_features2d.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_flann.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_xphoto.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_photo.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_imgproc.dylib) was built for newer macOS version (11.0) than being linked (10.10)
ld: warning: dylib (/usr/local/Cellar/opencv/4.5.2_4/lib/libopencv_core.dylib) was built for newer macOS version (11.0) than being linked (10.10)
[2/2] Linking JustOpenCV

* Build Completed!
代码语言:javascript
复制
> swift run
[1/1] Planning build

* Build Completed!

这会打开一个窗口,上面写着"Hello :)“,当按下一个键时,它就会关闭。

Swift中使用警告

虽然这适用于C++可执行文件,但我认为这需要更多的工作才能在Swift中使用,因为自目前Swift不能直接调用C++代码以来。我还没有尝试过,但我偶然发现这个项目使用OpenCV的叉子将OpenCV作为模块公开给Swift。我认为另一种解决方案是创建一个连接C++ OpenCV系统库并通过Objective++公开您需要的API的库目标。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67733051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档