0
在Visual Studio中是否可以使用C++庫和使用C編寫的另一個項目在同一個解決方案中,這個庫使用C?在Visual Studio中使用相同的解決方案從C++庫調用函數的C編譯項目
我在庫的頭什麼:
#ifdef __cplusplus
#define EXTERN extern "C"
#else
#define EXTERN
#endif
#ifndef LIB_API
#ifndef LIB_STATIC
#ifdef LIB_EXPORT
#define LIB_API EXTERN __declspec(dllexport)
#else
#define LIB_API EXTERN __declspec(dllimport)
#endif
#else
#define LIB_API
#endif
#endif
LIB_API uint32_t Func(int8_t *arg);
我想靜態鏈接到從我的C-項目這個庫,所以我選擇從庫項目依賴關係,定義了預處理器定義宏LIB_STATIC,選擇「編譯爲C代碼(/ TC)」選項並調用此函數。我得到的是鏈接錯誤
error LNK2019: unresolved external symbol _Func referenced in function _main
當我看着LIB文件,我可以找到有什麼樣Func鍵,而不是_Func。我做錯了什麼?
(忘了補充,有圖書館的一個.cpp模塊在相應的功能實現)從Angew
接聽和AnatolyS
我們需要在靜態庫情況下,這樣的定義LIB_API爲extern正確的預處理塊將是:
#ifndef LIB_API
#ifndef LIB_STATIC
#ifdef LIB_EXPORT
#define LIB_API EXTERN __declspec(dllexport)
#else
#define LIB_API EXTERN __declspec(dllimport)
#endif
#else
#define LIB_API EXTERN
#endif
#endif
_Func = FUNC鍵,爲了包括所需要的庫,你將需要添加這些項目下 - >屬性 - >鏈接器 - >輸入 - >附加依賴: – 2013-03-05 10:53:43
'在預處理器定義定義宏LIB_STATIC,選擇「編譯爲C代碼(/ TC)」選項 - 我明白你在C項目中做過,而不是在C++ lib中,對吧? – 2013-03-05 10:59:51
在靜態庫的情況下不應該將'LIB_API'定義爲'EXTERN'嗎? – Angew 2013-03-05 11:03:22