c++ - 链接到用 C/windows 编写的静态库中提供的函数不起作用

标签 c++ c

我们有一个用 C(不是 cpp)编写的大型静态库,其中包含如下定义的函数:

StructThing* __cdecl DoSomething(); // in header
StructThing* __cdecl DoSomething() { ... } // in .C file

在我们基于 C 的产品中使用它一切正常,但我们已经开始转向这个叫做 c++ 的新事物!

但是当我们尝试在 cpp 文件中使用 DoSomething 时,我们会在链接时遇到无法解析的外部符号错误。

看起来 cpp 编译器正在寻找函数的修饰版本。

我们怎样才能使符号(函数)对 cpp 编译器可用?最好不要更改源库(太多),我的第一个想法是通过 .def 文件,但它似乎被静态库解决方案忽略了(不确定是否适用于那种 vs 项目)

但这应该很容易,我假设 Windows API 的编写有点像这样。

有人吗?

VS 2012 更新 3

TIA

最佳答案

啊,它会出现“经典”

#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif

关于c++ - 链接到用 C/windows 编写的静态库中提供的函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18401652/

相关文章:

c++ - 提取函数会影响性能吗?

C++ 元组与结构

c - C 中 move 对象的函数 kbhit

c - 内存文件的文件路径

c - 在 VM 内的 nfs 共享目录中编译时出现 Exec 格式错误

c - NCurses 中的鼠标移动事件

c++ - 确定最大乐趣的算法

c++ - 如何有效地存储航路点

c++ - 将罗马数字转换为小数c++

c - 如何将视频容器中的十六进制值转换为 UTC 时间戳?