2016-04-19 18 views
1

我们有一个使用CMake的跨平台应用程序,我们已经链接到预编译的OpenSSL二进制文件。但是我们想链接到Android和iOS自己的OpenSSL。Cmake如何链接到设备上的OpenSSL?还是应该?

  1. 我们如何在CMake中做到这一点?
  2. 我们这样做主要是为了避免使用与操作系统版本不兼容的二进制文件。这是一种有效还是典型的关注?
+0

'我们如何在CMake中做到这一点?' - 只需选择正确的链接库。如果你使用find_package(),给它一个关于库的位置的提示。 – Tsyvarev

+0

尽管您已经接受了答案,但您应该等待以Cmake链接到您的库版本的问题的答案。 – jww

+0

***'我们想链接到Android和iOS自己的OpenSSL ......'*** - 这通常是一个坏主意,因为OEM经常在发布后放弃他们的软件。如果您针对自己的最新OpenSSL进行构建,并将其推送到您的应用程序,那么您将拥有更好的安全状态。然后,无论OEM做什么,您的应用都会始终处于最新状态。 Apple和CommonCrypto会有同样的问题。苹果也放弃了他们的软件。将OpenSSL,libxml2等移到维护库通常会更好。 – jww

回答

1

如果您想链接到Apple提供的OpenSSL库,您可能需要重新考虑该策略。苹果在其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版本做这些工作。

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

+0

好像我们应该在iOS上尝试常见的加密。我们已经使用Darwin SSL;我们只需要加密组件。 –

相关问题