2014-05-19 55 views
4

我正在編寫一個應該在各種SoCs(例如:Xilinx Zync,Freescale QorIQ)上運行的操作系統。 我的問題是,並非所有提供的IDE(由賽靈思,飛思卡爾等提供)都提供相同的庫(標準C & POSIX庫)。例如,CodeWarrior IDE具有timespec結構,而Xilinx則不具有這種結構。 此外,sleep在一些提供的庫中實現,但我有我自己的實現。我想讓我的代碼獨立於編譯器(某些製造商提供多個IDE和不同的編譯器)。C代碼的編譯器依賴性太大

有什麼建議嗎?

+1

當所有其他都失敗時,'#ifdef'是你的朋友。 – Mysticial

+0

如果你發現這個問題的一個很好的解決方案,你將會贏得諾貝爾獎。 –

+0

如果你在理論上甚至沒有POSIX,你應該堅持C標準的要求;在實踐中,這是不夠的(例如,標準中沒有「睡眠」),或者如果您在嵌入式系統上工作,甚至可能無法完全實現。用#ifdef's玩得開心。 –

回答

8

我的建議:代碼爲POSIX標準。如果供應商庫不符合POSIX標準,請自行實施POSIX層。

離開核心操作系統一般#ifdef - 免費,並把混亂在條件編譯兼容層。

3

簡單(雖然實施時間更長)的解決方案是而不是取決於供應商提供的庫。寫你自己的圖書館。也許這可以通過一些分層來完成。例如,它們全都提供strlen()

+0

您是否建議干預IDE設置(所有相關的IDE)並將自己的實現代替?我應該依靠那個嗎? (任何指導這樣的事情?) – John

+0

@約翰:當然。僅將IDE用於編輯器和編譯框架。關掉所有的庫並提供你自己的庫。 – wallyk