0

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

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

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

我“解决”了将 OpenSSL 版本从 2010 更新到最新版本的问题,但将来如果有人将 lib 与最近的 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 Test -lssl

最好的问候,塞尔吉奥

4

1 回答 1

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 链接,它将根本不会从任何其他版本开始。

于 2013-01-14T14:57:15.103 回答