2011-07-08 46 views
1

有一個Linux系統(作爲我的項目的一部分),我可能需要做熱代碼加載,即通過無線方式更新部分軟件(通過WiFi下載軟件)或通過局域網(over-the-wire)(通過LAN)。這個軟件有兩部分,一部分用C++編寫,另一部分用Erlang編寫。 C++部分通過TCP/IP(一組6至7個專有協議)與一些外部實體進行通信。我需要的部分主要是熱加載,是與這些外部實體交談的C++部分。 C++部分通過端口與Erlang通信(目前正在開發中),但我想將其改爲NIF(將來有時)。空中/ Over-the-Wire自動軟件更新(熱代碼加載)策略

有人可以提出一些C++功能的熱代碼加載策略。我意識到Erlang的能力,但我的理解是,這個功能不會擴展到用C++編寫的部分。

此外,我需要確保包含專有協議實現的C++模塊來自「有效源」。什麼可能是正確的策略呢?

我想我的要求並不少見,所以如果這樣的模塊,框架,庫存在,將很樂意指出這些。

回答

2

不知道任何現有的庫。 C/C++中的代碼加載在大多數情況下使用動態庫完成,您可以使用dlopen從代碼加載。然後你可以使用dlsym找到符號的地址。請注意,C++的確命名了這個名稱,這使得它很難找到符號。通常最好創建包裝在extern「C」中的正常函數,爲您創建對象,然後您可以像使用其他任何對象一樣使用它。

如果您想確定代碼是否有效,您可能應該查看公鑰/私鑰密碼術。您使用私鑰簽名代碼(基本上,您創建了二進制文件的加密哈希),加載代碼的軟件使用公鑰對簽名進行檢查。