2016-04-19 19 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;我們只需要加密組件。 –

相關問題