На мой взгляд, вы хотите использовать некоторые функции libcrypto.so.0.9.8, а некоторые из libcryto.so.1.0.0. Если большинство функций требуется от 1.0.0 или является предпочтительным выбором, тогда связывайтесь с libcrypto.so.1.0.0.
И вам может понадобиться некоторая функция из libcrypto.so.0.9.8, или у вас могут быть другие веские причины использовать libcrypto.so.0.9.8.
На мой взгляд, если вы связываетесь с библиотекой, вы получите ошибку компоновщика (дубликаты символов, так как обе библиотеки содержат одинаковые символы).
Если вам нужно использовать 0.9.8, загрузите его динамически с помощью dlopen и получите функцию обратного вызова функции, которую вы хотите использовать с dlsym.
Это может быть выполнено следующим образом:
void * handle;
/*reqd_callback is the callback of required function.*/
reqd_callback cb;
handle = dlopen ("libcrypto.so.0.9.8", RTLD_LAZY);
cb = (reqd_callback)dlsym(handle, "reqd_function");
//Call the cb
cb (parameters);
//Close the library.
dlclose(handle);
Я думаю, что это может решить вашу цель. Если предпочтение обратное, инвертируйте библиотеку при связывании и при загрузке через программу.
Насколько я знаю, по собственному опыту, если вы не используете функции 1.0 (такие как отметка времени), она будет работать нормально. Все, что вам нужно сделать, это установить зависимость от libssl-dev. Но поскольку имя сонга изменилось, что означает изменение интерфейса, вы должны его протестировать ... – Felipe
@Felipe - нет, изменение номера основной версии является ядром проблемы, для исполняемого файла требуется либо 0.9.8, либо 1.0.0 , в зависимости от версии ОС, на которой он был построен. то есть там, где символическая ссылка libcrypt.so указывала на время сборки. – fadedbee
А, я думаю, я понял. Вы компилируете свою программу где-нибудь (в 0.9.8 или 1.0.0), а затем вы должны запускать ее где-то в другом месте (опять же в 0.9.8 или 1.0.0).Ваша среда сборки отличается от среды выполнения, и они оба могут меняться, исправлять? – Felipe