gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:54:03 24 4
gpt4 key购买 nike

在 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,因此正确的预处理器 block 将是:

#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

关于c++ - 在 Visual Studio 中的同一解决方案中构建 C 项目以调用 C++ 库中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15221876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com