Cmake如何链接到设备上的OpenSSL?还是我应该?

Cmake如何链接到设备上的OpenSSL?还是我应该?,cmake,openssl,cross-platform,Cmake,Openssl,Cross Platform,我们有一个使用CMake的跨平台应用程序,我们一直链接到预编译的OpenSSL二进制文件。但我们想链接到Android和iOS自己的OpenSSL 我们如何在CMake中实现它 我们这样做主要是为了避免使用与OS版本不兼容的二进制文件。这是一个有效的问题还是一个典型的问题 如果您想链接到苹果提供的OpenSSL库,您可能需要重新考虑该策略。苹果在其(我的)重点中有以下文字: 尽管OpenSSL在开源社区中常用,但OpenSSL不提供不同版本的稳定API。因此,尽管OS X提供了OpenSSL库,

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

  • 我们如何在CMake中实现它
  • 我们这样做主要是为了避免使用与OS版本不兼容的二进制文件。这是一个有效的问题还是一个典型的问题

  • 如果您想链接到苹果提供的OpenSSL库,您可能需要重新考虑该策略。苹果在其(我的)重点中有以下文字:

    尽管OpenSSL在开源社区中常用,但OpenSSL不提供不同版本的稳定API。因此,尽管OS X提供了OpenSSL库,但OS X中的OpenSSL库已被弃用,而且OpenSSL从未作为iOS的一部分提供过。强烈反对应用程序使用OSX OpenSSL库

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

    另请参见答案和。因此,至少对于iOS来说,您必须构建自己的OpenSSL。有人可能会说,为了一致性和类似于上面摘自苹果的摘录中所述的原因,你可能也希望为你的Android版本这样做


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

    我们如何在CMake中执行此操作?
    -只需为链接选择正确的库即可。如果您使用find_package(),请提示库的位置。尽管您已经接受了答案,您应该等待有关使用Cmake链接到您的库版本的问题的答案。
    我们希望链接到Android和iOS自己的OpenSSL…
    -这通常是个坏主意,因为OEM通常在发布后放弃其软件。如果您基于自己的最新OpenSSL构建,并将其与应用程序一起推送,您将拥有更好的安全态势。然后,无论OEM做什么,您的应用程序都将始终是最新的。苹果和CommonCrypto也会有同样的问题。苹果也放弃了他们的软件。通常最好转到维护库,如OpenSSL、libxml2等@jww感谢您的建议,这是一个有效的观察结果。但我不能同意你的看法。答案是非常彻底的,涉及到如何(对我来说足够了),更重要的是,它超越了字面上的问题,准确地告诉我我想知道什么。但为了清楚起见,我确实更新了标题。似乎我们应该在iOS上尝试普通加密。我们已经在使用达尔文SSL;我们只需要加密组件。