C++ 构建C项目以从C+调用函数+;Visual Studio中同一解决方案中的库

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

在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 __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选项是保留的