在 Swift 5 中使用 Armadillo C++ 库

Using Armadillo C++ library in Swift 5

我正在尝试在我的 swift 代码中使用 Armadillo C++ 库来创建正弦曲线箭头。早些时候它与 Objective C 配合得很好。但是当我尝试在 Swift 中执行相同的实现时,它显示 'armadillo' file not found 错误。

我已经从 https://github.com/gadomski/armadillo/tree/master/branch-5.600/include 路径下载文件并将 armadillo_bits 文件夹和犰狳文件复制到项目中。

我也围绕 C++ class 创建了一个 Objective C++ 包装器。

Objective C++ 包装器 DrawSinusoidal.h 文件

#import <Foundation/Foundation.h>

@interface DrawSinusoidal : NSObject

+(NSArray *)bezierPathsForPoints:(NSArray *)points;

Objective C++ 包装器 DrawSinusoidal.mm 文件

#import "DrawSinusoidal.h"
#import "DrawSinusoidalMath.h"

@implementation DrawSinusoidal

+(NSArray *)bezierPathsForPoints:(NSArray *)points {
 ...
}

C++ 文件 - DrawSinusoidalMath.h

#include "armadillo"

std::vector<std::vector<arma::vec2>> bezierPathsForPoints(const std::vector<arma::vec2> &points);

C++ 文件 - DrawSinusoidalMath.cpp 文件

#include <iostream>
#include "DrawSinusoidalMath.h"

using namespace arma;

std::vector<arma::vec2> bezierPathsForPoints(const arma::mat &tValues, const std::vector<arma::vec2> &points)
{
... 
...
 return points
}

终于找到了解决办法。分享我遵循的步骤。

  • 我们需要将 pre-built Armadillo 软件包安装到 macOS,可以通过 MacPorts or HomeBrew
  • 安装
  • 我使用 HomeBrew 安装。

$ brew install armadillo

完成后,请记下最后一行的安装路径。

在我的机器上,它安装在路径/usr/local/Cellar/armadillo/10.5.1

  • 接下来,我们需要提供 Header 搜索路径。 Headers 在以下位置可用,因此只需复制路径并粘贴到 Xcode。

/usr/local/Cellar/armadillo/10.5.1/include/armadillo_bits

  • 接下来,我们需要link安装路径中的libarmadillo.dylib库到Xcode中的sdk路径。打开终端并输入以下命令。
sudo ln -s /usr/local/Cellar/armadillo/10.5.1/lib/libarmadillo.dylib /Applications/Xcode_12.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.4.sdk/usr/lib/libarmadillo.dylib
  • 完成后,现在您可以前往 Targets > Build Phases > Link Binary with Libraries 你应该看到 libarmadillo.dylib Select 并将其添加到您的项目中。

  • 最后一步.. 将 armadillo 文本文件和 armadillo_bits 文件夹从下面的路径复制到项目。 /usr/local/Cellar/armadillo/10.5.1/include

就是这样。设置已结束,您可以在 Objective-C/Swift 个项目中的 C++ 文件中使用 Armadillo 库。