如何使用SystemPackageProvider.brew(…)为Swift包目标依赖提供C/C++系统库?
经过一番研究后,以下几点似乎应该奏效:
// 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
发布于 2021-06-13 18:09:25
我正在考虑将支持添加到许多C和C++库中,因此我想尝试一下。在命中了许多死胡同之后,我终于能够通过创建一个基于这是我偶然遇到的的模块地图来构建它。
您可以在此承诺中看到对示例项目的相关更改。
Package.swift
// 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确认。
> pkg-config --list-all
...
opencv4 OpenCV - Open Source Computer Vision Library
...> pkg-config --cflags opencv4
-I/usr/local/Cellar/opencv/4.5.2_4/include/opencv4来源/opencv/module.Modemap
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 *
}值得注意的是,所有的图书馆都必须链接。
构建和运行
> 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!> swift run
[1/1] Planning build
* Build Completed!这会打开一个窗口,上面写着"Hello :)“,当按下一个键时,它就会关闭。
Swift中使用警告
虽然这适用于C++可执行文件,但我认为这需要更多的工作才能在Swift中使用,因为自目前Swift不能直接调用C++代码以来。我还没有尝试过,但我偶然发现这个项目使用OpenCV的叉子将OpenCV作为模块公开给Swift。我认为另一种解决方案是创建一个连接C++ OpenCV系统库并通过Objective++公开您需要的API的库目标。
https://stackoverflow.com/questions/67733051
复制相似问题