2013-01-14 56 views
0

我正在使用ubuntu,并且正在开发一个使用OpenSSL的C++库。使用不同版本的OpenSSL

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

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

我“解决了”从2010年开始更新OpenSSL版本到最后一个版本的问题,但将来有可能再次出现此问题,如果有人将该库与最近的OpenSSL版本一起使用。

所以,我想知道是否有可能,例如,使用OpenSSL必要的文件创建lib,以便代码执行,而不考虑编译lib的PC的OpenSSL版本简单的测试程序。为了创建我的库,我编译我的文件到.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测试-lssl

最好的问候, 塞尔吉奥

+0

您可以使用-static进行编译,但会增加可执行文件的大小 –

回答

0

通常这样的问题可以通过给库的不兼容版本使用不同的soname来解决(例如libssl.0.9.7和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链接便索性不与任何其他版本开始。