c++ - 将一些 C++ 添加到 C 程序使用的库中?
问题描述
我有一个长期存在的 C 和 C++ 程序使用的 C 库。
它有几个完全是 C++ 的编译单元(换句话说,C++ 源文件),但这从来都不是问题。我的理解是链接器(至少,Linux、Windows 等)总是在逐个文件级别工作,因此库中未引用的目标文件对链接没有任何影响, 不放在二进制文件中,依此类推。该库的 C 用户从不引用 C++ 符号,并且该库不在内部,因此生成的链接应用程序是 C-only。因此,虽然它总是完美地工作,但我不知道是因为 C++ 没有通过链接阶段,还是因为更深入地说,即使我确实混合了语言,这种混合也总是有效的。
我第一次考虑将一些 C++ 代码添加到现有 C API 的实现中。
出于讨论的目的,假设我有一个 C 函数,它做某事并通过 记录它stdout
,并且由于它与 分开缓冲cout
,因此输出可能会变得混乱。所以让我们说这个模块有一个选项可以设置为 log tocout
而不是stdout
. (这是一个更普遍的问题,不仅仅是关于获取cout
和stdout
合作。)C++ 代码可能运行也可能不运行,但依赖关系肯定存在。
这会以何种方式影响这个图书馆的用户?它被广泛使用,因此我无法检查整个用户群,并且由于它用于任务关键型应用程序,因此做出使链接开始失败的更改是不可接受的,至少除非我提供解释问题的发行说明和解决方案。
作为一个可能的问题的例子,我知道编译器有“隐藏”的支持函数库,这些库是 C 和 C++ 程序所必需的。显然还有标准 C 和 C++ 库,通常您不必显式链接到这些库。我担心的是编译器可能不知道做这些事情。
解决方案
推荐阅读
- c# - 单击停止循环按钮后,无法重新开始
- r - 使用 R 进行 LU 分解
- css - 如何在反应组件上添加多个类名
- performance - Http Range 请求将视频从 url 流式传输到 exoplayer
- laravel - 如何使用id从数据库中获取数据?
- intellij-idea - Intellij IDEA 很慢,编译很慢而且很耗内存
- xquery - 如何使用marklogic获取xml中的项目数
- uitableview - 问题从具有多个部分的表中删除单行(Swift 4)
- c# - Windows 上的 MeasureString 与 .NET Core 中的 Ubuntu 不匹配
- amazon-web-services - 如何从 Amazon Connect 中的 amazon lex 响应访问 sessionAttributes 值?