2016-08-14 91 views
0

我想在我們的嵌入式系統上移植一個用C++編寫的庫。 ARM平臺上嵌入式系統採用C編程語言編寫。我一直認爲我可以做到這一點。 C++編程語言比C複雜得多。裸板上的C++嵌入式系統

C++庫是否需要環境正常運行?如果我這樣做,我可能遇到的問題。

  1. C++的面向對象的模型需要特殊的內存管理系統。[新建,刪除,智能指針]
  2. C++的異常處理,在我看來,這是是一種神話。據我所知,WinCE的C++異常處理需要ARM-core/Kernel的支持。
  3. 其他功能,如運行時類型信息

可否請你分享我的一些經驗。非常感謝你。

+0

你需要在C中有這個庫嗎?或者你只需​​要編譯它並提供一個C API來與之通信? – JVApen

+0

你的編譯器說什麼? –

+0

對,你可以「溝通」它,但是怎麼樣?圖書館必須在你的系統的某個地方運行,對吧?例如,在一個RTOS中,我們可以在一個任務中添加這個庫來與之通信嗎? – Dongguo

回答

0

從你的問題來看,如果你嘗試移植(即將C++程序重寫爲C)或者只是在嵌入式環境中運行C++程序,並且因此(幾乎)不改變它,目前還不清楚。在#1的情況下,你應該使用你的想法。沒有任何麻煩(除非需要很長時間...)#2的情況下也不會那麼容易。要考慮的事情(我會假設你使用GNU工具鏈或從它派生,如果沒有 - 我只是不知道事情是如何)

  • 你有一個裝載機,可以做到這一點?那就是模板符號應該以一種特殊的方式處理(它們很弱),但是隻有當你使用一些dylds(動態庫)時,它纔會打擾你。您的加載器應該能夠調用全局構造函數和析構函數。異常展開信息的加載也應該由它來處理。需要注意的一點是:https://refspecs.linuxfoundation.org/LSB_3.0.0/LSB-PDA/LSB-PDA/ehframechpt.html
  • 您需要C++運行時。即基礎支持語言,只是作爲一個起點,我建議看看這裏:https://github.com/gcc-mirror/gcc/tree/master/libstdc++-v3/libsupc++ 考慮到這也意味着工作malloc /免費功能,類似於mmap。
  • 如果你的程序使用線程,TLS(線程本地存儲,thread_local C++關鍵字),文件處理和異常的複雜性急劇增加...我希望祝你好運,移植或使用完整版本的stdlibC++ (g ++)或libC++(clang)
  • 只是需要思考的一點是你需要glibc或者其他一些微型替換,比如https://www.uclibc.org/如果你使用了一些非標準替換,值得考慮如何將它與上面的C++庫結合起來(stdlibC++或libC++,或其他理論上可能使用的東西)

關於上述這些事情的思考我決定,對於我自己的小型裸機臂項目,C++是太多,並且Force在C.

1

取決於您的庫,但在嵌入式平臺上,您通常會關閉rtti和異常處理。 C++通常需要一個內存分配器,通常用malloc來實現。如果它是別的東西,你將會提供一個默認的過濾器新的和操作員刪除的實現。編譯器會處理其餘的事情。