iOS 的 Openssl 引擎未加载
Openssl Engine for iOS is not loaded
我们有一个项目需要 运行 iOS 设备上的 openssl 引擎。我们已经为测试引擎编译了 .so 文件,它在命令行下运行良好。但是当我们把它放在iOS项目中并尝试加载引擎时,加载步骤总是报错。
NSString *enginePath = [[NSBundle mainBundle] pathForResource:@"silly-engine" ofType:@"so"];
char* engine_id = "silly-engine";
char* engine_path = (char *)[enginePath UTF8String];
ENGINE_load_dynamic();
ENGINE *dyn = ENGINE_by_id("dynamic");
if (!ENGINE_ctrl_cmd_string(dyn, "SO_PATH", engine_path, 0))
{
NSLog(@"SO_PATH failed");
}
if (!ENGINE_ctrl_cmd_string(dyn, "DIR_ADD", engine_path, 0))
{
NSLog(@"DIR_ADD failed");
}
if (!ENGINE_ctrl_cmd_string(dyn, "ID", engine_id, 0))
{
NSLog(@"ID failed");
}
if (!ENGINE_ctrl_cmd(dyn, "LIST_ADD", 1, NULL, NULL, 0))
{
NSLog(@"LIST_ADD failed");
}
if (!ENGINE_ctrl_cmd_string(dyn, "LOAD", NULL, 0))
{
NSLog(@"LOAD failed");
}
ENGINE *myEngine = ENGINE_by_id(engine_id);
myEngine
将变为 NULL
。我怀疑 iOS 不允许这样的动态库。有没有人有过如何让 OpenSSL 引擎在 iOS 上工作的经验?
Apple 不允许您在 iOS 上使用 "so"(共享库)。
最简单的方法是通过 CocoaPods 将 OpenSSL 集成到您的项目中:https://cocoapods.org/pods/OpenSSL-Universal
最后我通过使用静态引擎解决了这个问题。只需在 OpenSSL 引擎调用中加载引擎文件就可以了。 iOS.
不需要动态引擎
我们有一个项目需要 运行 iOS 设备上的 openssl 引擎。我们已经为测试引擎编译了 .so 文件,它在命令行下运行良好。但是当我们把它放在iOS项目中并尝试加载引擎时,加载步骤总是报错。
NSString *enginePath = [[NSBundle mainBundle] pathForResource:@"silly-engine" ofType:@"so"];
char* engine_id = "silly-engine";
char* engine_path = (char *)[enginePath UTF8String];
ENGINE_load_dynamic();
ENGINE *dyn = ENGINE_by_id("dynamic");
if (!ENGINE_ctrl_cmd_string(dyn, "SO_PATH", engine_path, 0))
{
NSLog(@"SO_PATH failed");
}
if (!ENGINE_ctrl_cmd_string(dyn, "DIR_ADD", engine_path, 0))
{
NSLog(@"DIR_ADD failed");
}
if (!ENGINE_ctrl_cmd_string(dyn, "ID", engine_id, 0))
{
NSLog(@"ID failed");
}
if (!ENGINE_ctrl_cmd(dyn, "LIST_ADD", 1, NULL, NULL, 0))
{
NSLog(@"LIST_ADD failed");
}
if (!ENGINE_ctrl_cmd_string(dyn, "LOAD", NULL, 0))
{
NSLog(@"LOAD failed");
}
ENGINE *myEngine = ENGINE_by_id(engine_id);
myEngine
将变为 NULL
。我怀疑 iOS 不允许这样的动态库。有没有人有过如何让 OpenSSL 引擎在 iOS 上工作的经验?
Apple 不允许您在 iOS 上使用 "so"(共享库)。
最简单的方法是通过 CocoaPods 将 OpenSSL 集成到您的项目中:https://cocoapods.org/pods/OpenSSL-Universal
最后我通过使用静态引擎解决了这个问题。只需在 OpenSSL 引擎调用中加载引擎文件就可以了。 iOS.
不需要动态引擎