在 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
}
终于找到了解决办法。分享我遵循的步骤。
$ 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 并将其添加到您的项目中。
就是这样。设置已结束,您可以在 Objective-C/Swift 个项目中的 C++ 文件中使用 Armadillo 库。
我正在尝试在我的 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
}
终于找到了解决办法。分享我遵循的步骤。
$ 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 并将其添加到您的项目中。
就是这样。设置已结束,您可以在 Objective-C/Swift 个项目中的 C++ 文件中使用 Armadillo 库。