Openssl Engine для iOS не загружен

У нас есть проект, который должен запустить движок openssl на устройстве iOS. Мы скомпилировали файл.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 Engine работать на iOS?

2 ответа

Решение

Наконец, я решил эту проблему с помощью статического движка. Просто загрузка файла движка в OpenSSL должна вызывать движки. Нет необходимости в динамическом движке на iOS.

Apple не разрешает вам использовать "так" (общие библиотеки) на iOS.

Самый простой способ для вас - это интегрировать OpenSSL в ваш проект через CocoaPods: https://cocoapods.org/pods/OpenSSL-Universal

Другие вопросы по тегам