使用不同版本的OpenSSL

时间:2013-01-14 11:49:14

标签: g++ openssl

我正在研究ubuntu,我正在开发一个使用OpenSSL的C ++库。

因此,我用来开发代码的PC有一个2010的OpenSSL版本。我创建了lib,用一个简单的测试程序编译它,然后我成功执行它。

然后,当我在其他PC(具有最新的OpenSSL版本 - 2012年5月)中测试lib时,我成功编译了简单的测试程序,但是当我执行它时它们会崩溃。

我“解决”了将OpenSSL版本从2010更新到最后的问题,但将来有可能再次出现此问题,如果有人将使用最近的OpenSSL版本的lib。

所以,我想知道是否有可能,例如,创建带有OpenSSL必需文件的lib,以便代码执行,无论使用编译lib的PC的OpenSSL版本如何简单的测试程序。

为了创建我的lib,我将我的文件编译成.obj文件(例如:g ++ -c fileA.c -o fileA.o),然后创建一个libABC.a文件(ar rcs libABC.a filaA。 o fileB.o ...)。 我只使用“-lssl”编译选项将我的库与其余代码链接起来,例如:g ++ simpleCode.o libABC.a -o Test -lssl

最诚挚的问候,    塞尔吉奥

1 个答案:

答案 0 :(得分:0)

通常,通过为库的不兼容版本提供不同的soname(例如libssl.0.9.7 vs libssl.1.0.0)来解决这样的问题。如果您的libssl.so版本没有版本化的soname,则它会被破坏。

要检查库的soname以及程序所链接的soname,请执行以下命令

 ldd /path/to/your/program/Test | grep openssl
 objdump --private-headers /usr/lib/libssl.so* | grep SONAME

如果您的程序与libssl.0.9.7链接,则不会以任何其他版本开头。