我在C.嵌入式項目致力於通過我們的供應商提供的工具鏈包括缺少一些POSIX標準功能有限的C庫。例如,他們有一個time.h
,但一些POSIX功能被省略。我想在我的項目中包含一些來自源代碼的C庫,使用#include <time.h>
並期望這些函數存在。有沒有辦法讓這些庫,而無需修改其源代碼或者沒有選擇,只能創建另一個頭或許命名爲time_suppl.h
與附加功能和編輯所有的庫的源文件包括編譯每當他們包括time.h
?如何覆蓋系統c庫標頭?
0
A
回答
1
的答案是,這取決於你的編譯器,但通常有辦法做到這一點無需修改工具鏈,或者你正在試圖編譯庫。相反,您只需更改編譯器使用的包含搜索路徑。以下是如何做到這一點兩個有用的例子:,將增加對系統頭具有較高優先級的搜索路徑
- 對於GCC是簡單的使用
-I
選項,這是因爲使用該參數指向一樣簡單具有與系統標題完全相同的文件的位置,例如time.h
。在gcc.gnu.org完整的文件說:
目錄dir添加到要搜索 頭文件的目錄列表。請參閱搜索路徑。在標準系統包含目錄之前,用-I命名的目錄被搜索 。
- 對於專有ARMCC編譯器有一個
-J
選項,允許你覆蓋完全其在更深入in their documentation描述的系統報頭搜索路徑。
0
這更多的是除了@ satur9nine的答案,但你可以做到這一點而不復制整個的time.h
。如果你使用GCC,你可以使用#include_next
預處理指令包括在搜索路徑的文件的「下一步」的實例。看看下面的例子:
在/home/me/test_include/time.h:
#include_next <time.h> // Will pull in the standard time.h
int myNewTimeFunction();
如果再編譯使用gcc -I/home/me/test_include
,那麼你的新功能將有一個聲明,當你#include <time.h>
。
This is a GCC extension - YMMV with other compilers。
相關問題
- 1. Template10覆蓋Windows Mobile系統標頭
- 2. C#覆蓋的系統控制
- 3. 如何覆蓋系統時間
- 4. 如何覆蓋系統功能
- 5. 如何覆蓋上activityResult在android系統
- 6. 如何旋轉系統覆蓋按鈕
- 7. 如何覆蓋arduino庫頭中的#define
- 8. 覆蓋系統快捷鍵
- 9. VIM:覆蓋系統vimrc
- 10. Atom覆蓋系統鍵
- 11. 系統覆蓋的Android 4.0
- 12. 系統覆蓋檢測器
- 13. 覆蓋系統方法
- 14. 覆蓋系統類的serialVersionUID
- 15. $ .ajax:如何覆蓋默認http標頭
- 16. C++自定義全局新/刪除覆蓋系統庫
- 17. 如何避免在Python中覆蓋系統庫的屬性?
- 18. JSF,覆蓋HTTP標頭
- 19. 覆蓋XDocument.Load請求標頭
- 20. 使用gcc編譯時覆蓋系統頭文件
- 21. C++覆蓋...覆蓋?
- 22. WM6上的覆蓋系統繪圖+
- 23. 在Mac上覆蓋系統vim
- 24. 覆蓋寶石的系統安裝
- 25. 覆蓋系統首選項窗格?
- 26. 覆蓋系統日期格式
- 27. 故事板覆蓋系統字體
- 28. 禁用android系統音量覆蓋
- 29. NSScrollView:覆蓋系統顯示設置?
- 30. 系統的Verilog:覆蓋的成員系統的Verilog類
我會做一個'time_suppl.h'和'#include'它''。每次更新工具鏈的時候,你就必須修復'',但好像不是編輯每次更新磁帶庫時庫文件的維護更少。 –
user3386109
裸機嵌入式系統不兼容POSIX,許多操作系統都不兼容。 – Olaf
你的問題比缺少聲明要深得多。您大概也錯過了相關功能的*實現*。只是提供標題完全不足以解決這個問題。 –