Cmake如何在设备上链接到OpenSSL?或者我应该?

时间:2016-04-19 20:15:36

标签: cmake openssl cross-platform

我们有一个使用CMake的跨平台应用程序,我们已经链接到预编译的OpenSSL二进制文件。但我们想链接到Android和iOS自己的OpenSSL。

  1. 我们如何在CMake中完成?
  2. 我们主要是为了避免使用与操作系统版本不兼容的二进制文件。这是一个有效或典型的问题吗?

1 个答案:

答案 0 :(得分:2)

如果您想要链接到Apple提供的OpenSSL库,您可能需要重新考虑该策略。 Apple在cryptographic services guide(强调我的)中有以下文字:

  

虽然OpenSSL常用于开源社区,但OpenSSL不提供从版本到版本的稳定API。因此,尽管OS X提供了OpenSSL库,但OS X中的OpenSSL库已弃用,和OpenSSL从未作为iOS的一部分提供。强烈建议不要使用应用程序使用OS X OpenSSL库。

     

如果您的应用依赖于OpenSSL,您应该自己编译OpenSSL并将已知版本的OpenSSL静态链接到您的应用中。在OS X和iOS上都可以使用OpenSSL。但是,除非您尝试维护与现有开源项目的源兼容性,否则通常应使用不同的API。

另请参阅答案herehere。因此至少对于iOS来说,无论如何都必须构建自己的OpenSSL。有人可能会争辩说,你可能也想为你的Android版本做这件事,以保持一致性和类似于Apple上面提取的原因。

正如@Tsyvarev在对你的问题的评论中所说的那样,使用find_package()并使用适当的提示将你的构建指向你想要使用的OpenSSL。您的问题表明您已经使用了自己预先构建的OpenSSL,因此可能您可以控制它所在的位置,并且使用find_package()将是一种很好的平台独立方式来处理不同的库后缀等。最近版本的CMake将还为您提供了随附的导入目标,包括路径依赖项,因此它们将更容易使用您的代码(只需链接到它们并获得免费添加OpenSSL的标题搜索路径)。请阅读FindOpenSSL module的CMake文档以获取更多详细信息。