2017-04-03 134 views
0

我有一個靜態庫項目(用C語言編寫)和另一個樣本項目(C語言編寫)的Visual Studio 2015下我可以使用功能位於在圖書館示例項目沒有任何問題。我的問題是,我在靜態庫項目的一個頭文件中有一個宏,我在示例項目中看不到(或使用)這個宏。我收到這個錯誤:「主函數中引用的未解析的外部符號ADD1」。我如何在示例項目中使用這個宏?靜態庫不包含宏

注:我使用的示例項目由於在庫文件到該編譯該編譯指示:#pragma評論(LIB,「MYLIB.LIB」)

+2

和你怎麼包括該庫的頭文件? –

+0

您是否在代碼中包含標題? – LPs

+0

不,我不知道!此外,我不想包含任何靜態庫項目的頭文件。他們不應該被其他項目看到。 – sanchop22

回答

2

包括與#include指令你的頭,無法與某些編譯。

頁眉應該這麼寫,它是公共接口庫中,即使庫代碼本身可能不開放。宏是公開的,然後可以在頭中聲明,或者它不公開,在這種情況下,您應該將其封裝在庫中。

如果庫中的代碼是預編譯爲二進制傳輸,無論是在C文件或調用者不具有訪問.h文件聲明。

+1

'pragma'用於Visual Studio - 這是將庫的二進制文件鏈接到應用程序的一種方法。 ('gcc'爲此使用'-l'選項)。 – Attie

+1

@Attie圖書館不是一個標題,但它需要提供一個。 – Lundin

3

I do not want to include any of the header files of the static library project. They are not supposed to be seen by other projects.

我認爲存在一些混淆。


要使用任何庫的,你必須瞭解它的功能,數據類型(例如:enumstructtypedef),宏等等......這一切都在一起,形成了圖書館的「API」。

大多數庫(不是全部)都會有一些內部的頭文件。你是對的,這些不應該被其他項目看到,並且將嚴格在內部使用。

所有圖書館將具有定義他們的API一些「公共」的標題。沒有公共API的代碼庫是無用的,或者實際上是一個獨立的應用程序。