[英]Build C project to call functions from C++ library in the same solution in Visual Studio
在Visual Studio中,是否可以在同一解決方案中擁有一個帶有C ++庫的項目,而另一個項目又由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
要從C代碼使用C ++函數,您必須將此類函數導出為C,因此請更改LIB_API的定義以進行靜態鏈接:
#else
#define LIB_API EXTERN
#endif
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.