如果要生成用 C++ 编写且可用于 C 程序的库,必须创建 C API(application programming interface,应用程序编程接口)。为此,应先使所有导出的函数为 extern "C"。注意,只有在全局函数中才能够完成该操作,在成员函数中不行。
如果 C 接口库需要 C++ 运行时支持,且要使用 cc 进行链接,则在使用 C 接口库时,还必须用 libC(兼容模式)或 libCrun(标准模式)链接应用程序。(如果 C 接口库不需要 C++ 运行时支持,就不必用 libC 或 libCrun 进行链接。)归档库与共享库的链接步骤是不同的。
提供归档的 C 接口库时,必须提供如何使用该库的说明。
如果 C 接口库是在标准模式(缺省模式)下使用 CC 生成的,那么在使用该 C 接口库时,将 -lCrun 添加到 cc 命令行。
如果 C 接口库是在兼容模式 (-compat) 下使用 CC 生成的,那么在使用该 C 接口库时,将 -lC 添加到 cc 命令行。
提供共享的 C 接口库时,必须在生成库时创建对 libC 或 libCrun 的依赖性。如果共享库具有正确的依赖性,就不必在使用该库时将 -lC 或 -lCrun 添加到命令行。
如果要在兼容模式 (-compat) 下生成 C 接口库,应在生成库时将 -lC 添加到 CC 命令行。
如果要在标准模式(缺省模式)下生成 C 接口库,应在生成库时将 -lCrun 添加到 CC 命令行。
如果要删除对 C++ 运行时库的任何依赖性 ,应该在库源文件中强制应用下列代码规则:
不要使用任何形式的 new 或 delete,除非提供了自己的相应版本。
不要使用异常。
不要使用运行时类型信息 (RTTI)。