运送仅暴露 C api 的 C++ dll

Shipping a C++ dll with only a C api exposed

我正在编写一个 API 仅用于 C 的软件,因为它很容易 link C 代码与其他 softwares/clients.

然而,实际的程序代码是用 C++ 完成的,使用了所有常见的 C++ 功能,如异常、STL 等。

导出的 API / header 本身将用纯 C 语言编写,带有 export "C" 关键字。

如果我打算将此dll 交付给对他们这边没有C++ 知识的用户,我应该注意什么?通常他们不应该关心实际代码是 C++ 的事实,只需要知道如何通过 header 文件 link 来对抗 C 代码。 有人告诉我,我应该确保 libstd 是静态 linked,这在所有平台上都是不可能的(将有一个 linux 和一个 windows 构建)。例外情况如何?等等

1) 将您的 header 包裹在:

#ifdef __cplusplus
extern "C" {
#endif

2) 制作不透明指针:

struct myInternalStructFOO; // incomplete type
typedef struct myInternalStructFOO *cFOO; // public type

class myInternalClassBAR; // incomplete type
typedef class myInternalClassBAR *cBAR; // public type

您无需在 public api 中给出 class 定义。 class 定义将进入一些私人 headers。