2013-03-05 104 views
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为e​​xtern正确的预处理块将是:

#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 
+0

_Func = FUNC键,为了包括所需要的库,你将需要添加这些项目下 - >属性 - >链接器 - >输入 - >附加依赖: – 2013-03-05 10:53:43

+0

'在预处理器定义定义宏LIB_STATIC,选择“编译为C代码(/ TC)”选项 - 我明白你在C项目中做过,而不是在C++ lib中,对吧? – 2013-03-05 10:59:51

+0

在静态库的情况下不应该将'LIB_API'定义为'EXTERN'吗? – Angew 2013-03-05 11:03:22

回答

0

要使用C++函数的C代码,你有这样的功能,导出为C,那么改变你的LIB_API的定义静态链接:

#else 
#define LIB_API EXTERN 
#endif 
相关问题