C++ 构建C项目以从C+调用函数+;Visual Studio中同一解决方案中的库
在VisualStudio中,一个项目使用C++库,另一个项目使用C在同一个解决方案中编写,并且使用C从该库调用函数,这是可能的吗 库标题中的内容:C++ 构建C项目以从C+调用函数+;Visual Studio中同一解决方案中的库,c++,c,visual-studio,C++,C,Visual Studio,在VisualStudio中,一个项目使用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 __declspe
#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项目静态链接到此库,因此我从库项目中选择dependency,在预处理器定义中定义宏LIB_STATIC,选择“编译为C代码(/TC)”选项并调用此函数。我得到的是链接器错误
error LNK2019: unresolved external symbol _Func referenced in function _main
当我查看lib文件时,我可以找到类似Func和not(u 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的函数,因此更改LybAPI的静态链接定义:
#else
#define LIB_API EXTERN
#endif
FuncFunFunc,为了包含所需的库,您需要在Projt:> Projks>链接器>输入->附加依赖项:<代码>定义预处理器定义中的宏LIbIOD,选择“编译为C代码(/TC)”选项——我理解您在C项目中这样做,而不是在C++ LIB中执行,对吗?在静态库的情况下,
LIB_API
不应该被定义为EXTERN
?@ACB:是的,我这样做了,还添加了到附加库的方法Directories@Zdeslav沃伊科维奇:是的,我在C-project中做过,默认情况下,C++-lib选项是保留的