Meiner Meinung nach möchten Sie eine Funktion von libcrypto.so.0.9.8 und einige von libcryto.so.1.0.0 verwenden. Wenn die meisten Funktionen von 1.0.0 benötigt werden oder bevorzugt werden, verlinken Sie diese mit libcrypto.so.1.0.0.
Und Sie benötigen möglicherweise eine Funktion von libcrypto.so.0.9.8 oder Sie haben andere gute Gründe, libcrypto.so.0.9.8 zu verwenden.
Meiner Ansicht nach, wenn Sie von der Bibliothek verknüpfen, erhalten Sie Linker Fehler (doppelte Symbole, da beide der Bibliothek die gleichen Symbole enthält).
Wenn Sie 0.9.8 verwenden müssen, dann laden Sie es dynamisch mit dlopen und erhalten Sie die Funktion Rückruf, die Sie mit dlsym verwenden möchten.
Dies kann wie folgt erreicht werden:
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);
Ich denke, das Ihren Zweck lösen kann. Wenn die Präferenz umgekehrt ist, invertiere die Bibliothek beim Verknüpfen und beim Laden durch das Programm.
Soweit ich weiß, wird es aus eigener Erfahrung funktionieren, wenn Sie keine 1.0 Features (wie Zeitstempel) verwenden. Alles, was Sie tun müssen, ist eine Abhängigkeit von libssl-dev. Aber seit der Soname geändert hat, bedeutet eine Änderung in der Schnittstelle, müssen Sie es testen ... – Felipe
@Felipe - Nein, die Hauptversionsnummer Änderung ist der Kern des Problems, die ausführbare Datei erfordert entweder 0.9.8 oder 1.0.0 , abhängig von der Betriebssystemversion, auf der es erstellt wurde. d. h. wo immer der libcrypt.so-Symlink auf die Build-Zeit zeigte. – fadedbee
Ah, ich glaube ich habe es verstanden. Sie kompilieren Ihr Programm irgendwo (in 0.9.8 oder 1.0.0), und dann müssen Sie es irgendwo anders ausführen (wieder in entweder 0.9.8 oder 1.0.0).Ihre Build-Umgebung unterscheidet sich von Ihrer Laufzeitumgebung und beide können variieren, korrigieren? – Felipe