Oracle® Developer Studio 12.5:C++ 用户指南

退出打印视图

更新时间: 2016 年 7 月
 
 

14.7 生成具有 C API 的库

如果要生成以 C++ 编写但可用于 C 程序的库,该库必须具有 C API(application programming interface,应用程序编程接口)。 这意味着所有导出的函数都将声明为 extern "C"。请注意,您只能对普通函数和数据而不能对类成员执行此类操作。此外,在接口中使用的所有类型都必须是可以在 C 中声明的类型。

如果 C 接口库需要 C++ 运行时支持(例如,在内部使用类类型或 C++ 库函数),且要与 C 编译器 cc 链接,则还必须与相应的 C++ 运行时库链接,如下所述。

应该创建动态(共享)库而非静态(归档)库。动态库将是自包含的,具有对它所依赖的 C++ 运行时库的引用。如果创建静态库,则库的用户需要将 C++ 运行时库链接到其程序中,并且需要使用 CC(而非 cc)来链接程序或者复制 CC 将生成的 ld 命令行。

创建动态库时,请列出与您使用的编译模式(-compat=x-std=x)关联的 C++ 运行时库。生成动态(共享)库中列出了这些库。

也可以生成不依赖于任何 C++ 运行时库的库。至少需要遵循以下准则:

  • 不要使用 newdelete 的数组形式。

  • 除非提供您自己的 operator newoperator delete 版本,否则不要使用 newdelete 的单对象形式。

  • 不要使用异常。(使用 –noex 进行编译。)

  • 不要使用运行时类型信息 (RTTI)。(使用 –features=no%rtti 进行编译。)

  • 不要使用 dynamic_cast

  • 不要使用任何标准 C++ 头。