2013-05-21 58 views
0

我想編譯一個arduino程序。在Arduino IDE中鏈接預建對象

我想有一些已經編譯好的文件,除了草圖以外的所有東西。我已經修改了arduino IDE來編譯未編譯的文件,但我需要具有所有文件的.h文件。

是否可以在CPP中編譯一個文件,其中包含.o和.h之外的其他文件?

我不希望任何人看到我的文件或代碼,包括.h。

如果可能的話,我會開始檢查arduino代碼,尋找如何修改它,但如果不是,我將不得不尋找另一種方法來做到這一點。

+0

從理論上講,你可以將你的目標文件與已經存在的目標文件鏈接**。然而,即使沒有* header **文件,'.cpp'文件也不知道**對象**文件中的任何內容。那麼提供這樣一個不可見的圖書館有什麼意義? – phoeagon

+0

編輯您的標題以反映您要做的事是鏈接已編譯的文件。這對於Arduino作爲目標(例如使用Makefile構建)來說絕對是可能的(如果您只提供了函數原型的頭文件等),但讓IDE執行此操作可能會非常棘手 - IDE似乎旨在鼓勵庫這是開放源代碼和用戶可改進的。 –

+0

@ChrisStratton當然是有可能的。但新編譯的'.cpp'沒有定義* object *文件中的這些標識符,因此不能使用它們(也許仍然可以使用*醜陋的*指針)...... – phoeagon

回答

3

Arduino使用C++,編譯後的C++函數名稱被破壞以包含對象(.o)文件中的參數類型。使用兼容名稱修飾編譯用戶代碼的唯一方法是在編譯時具有完整的函數聲明。

因此,您至少必須提供一個頭文件,其中包含用戶將調用的所有函數的完整函數聲明。這不可能是祕密的,它是你的API,如果你不告訴它,用戶不能使用它。

你不需要包含在公共頭文件中的是內部私有函數或數據類型的聲明或定義。

因此,創建一個library_public.h文件,其中只包含用戶應該知道的聲明並將其與.o文件一起提供。然後創建一個包含所有祕密內容的library_private.h。您的私有源代碼將包含兩者。

+0

謝謝你的解釋。我會這樣做 – Biribu

+0

只是與此有關的另一個問題。我在「祕密」文件中有一些功能,這些文件被「公共」功能調用。我是否也可以在library_privare.h中包含祕密文件? – Biribu