首页 > 解决方案 > 将一些 C++ 添加到 C 程序使用的库中?

问题描述

我有一个长期存在的 C 和 C++ 程序使用的 C 库。

它有几个完全是 C++ 的编译单元(换句话说,C++ 源文件),但这从来都不是问题。我的理解是链接器(至少,Linux、Windows 等)总是在逐个文件级别工作,因此库中未引用的目标文件对链接没有任何影响, 不放在二进制文件中,依此类推。该库的 C 用户从不引用 C++ 符号,并且该库不在内部,因此生成的链接应用程序是 C-only。因此,虽然它总是完美地工作,但我不知道是因为 C++ 没有通过链接阶段,还是因为更深入地说,即使我确实混合了语言,这种混合也总是有效的。

我第一次考虑将一些 C++ 代码添加到现有 C API 的实现中。

出于讨论的目的,假设我有一个 C 函数,它做某事并通过 记录它stdout,并且由于它与 分开缓冲cout,因此输出可能会变得混乱。所以让我们说这个模块有一个选项可以设置为 log tocout而不是stdout. (这是一个更普遍的问题,不仅仅是关于获取coutstdout合作。)C++ 代码可能运行也可能不运行,但依赖关系肯定存在。

这会以何种方式影响这个图书馆的用户?它被广泛使用,因此我无法检查整个用户群,并且由于它用于任务关键型应用程序,因此做出使链接开始失败的更改是不可接受的,至少除非我提供解释问题的发行说明和解决方案。

作为一个可能的问题的例子,我知道编译器有“隐藏”的支持函数库,这些库是 C 和 C++ 程序所必需的。显然还有标准 C 和 C++ 库,通常您不必显式链接到这些库。我担心的是编译器可能不知道做这些事情。

标签: c++clinkercompatibility

解决方案


推荐阅读