如何编译适用于libcrypto.so.0.9.8和libcryto.so.1.0.0的二进制文件?

fad*_*bee 7 c openssl autotools libssl

我有一个autotools C项目.

如何编译适用于libcrypto.so.0.9.8和libcryto.so.1.0.0的二进制文件?(即Ubuntu 9.10和12.04)

根据我进行构建的操作系统的使用年限,二进制文件需要一个版本或另一个版本.

有没有办法使它不关心,或者libcryto版本之间的差异是不可克服的?

dop*_*ime 3

在我看来,你想使用 libcrypto.so.0.9.8 的一些功能和 libcryto.so.1.0.0 的一些功能。如果大多数功能需要从 1.0.0 开始,或者是首选,则链接到 libcrypto.so.1.0.0。

您可能需要 libcrypto.so.0.9.8 中的某些功能,或者您可能有其他充分的理由使用 libcrypto.so.0.9.8。

在我看来,如果您从两个库链接,您将收到链接器错误(重复符号,因为两个库都包含相同的符号)。

如果您需要使用 0.9.8,则使用 dlopen 动态加载它并获取您想要与 dlsym 一起使用的函数回调。

这可以通过以下方式完成:

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);
Run Code Online (Sandbox Code Playgroud)

我想这可以解决你的目的。如果偏好相反,则在链接和通过程序加载时反转库。