2016-04-28 52 views
0

我在C.嵌入式項目致力於通過我們的供應商提供的工具鏈包括缺少一些POSIX標準功能有限的C庫。例如,他們有一個time.h,但一些POSIX功能被省略。我想在我的項目中包含一些來自源代碼的C庫,使用#include <time.h>並期望這些函數存在。有沒有辦法讓這些庫,而無需修改其源代碼或者沒有選擇,只能創建另一個頭或許命名爲time_suppl.h與附加功能和編輯所有的庫的源文件包括編譯每當他們包括time.h如何覆蓋系統c庫標頭?

+1

我會做一個'time_suppl.h'和'#include'它''。每次更新工具鏈的時候,你就必須修復'',但好像不是編輯每次更新磁帶庫時庫文件的維護更少。 – user3386109

+1

裸機嵌入式系統不兼容POSIX,許多操作系統都不兼容。 – Olaf

+2

你的問題比缺少聲明要深得多。您大概也錯過了相關功能的*實現*。只是提供標題完全不足以解決這個問題。 –

回答

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。