我正在研究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
最诚挚的问候, 塞尔吉奥
答案 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链接,则不会以任何其他版本开头。