从 C 调用的 C++ 共享库

标签 c++ c shared-libraries portability

我有一个用 C++ 编写的共享库。它导出一个由 extern "C" 函数组成的可见接口(interface),这些函数创建、销毁和操作不透明类型。

现在,我想要一个使用这个库的纯 C 程序。

我可以这样做(独立于平台)吗?如果 main 不是用 C++ 编写的,C++ 运行时和 C++ 静态对象何时初始化?

最佳答案

初始化阶段依赖于平台。 对于 Linux,动态加载的库可以具有特殊声明的符号,这些符号在加载库时由 dlopen() 自动调用。

有关详细信息,请参阅 dlopen(3) 的联机帮助页,过时的符号 init() 和 fini() 部分。

静态初始值设定项被隐式标记为 __attribute__((constructor)),因此通常您无需执行任何特殊操作即可在加载共享库时调用它们。我怀疑这在其他平台上也是相同或相似的。

关于从 C 调用的 C++ 共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8617078/

相关文章:

c++ - 如果创建对象并为其赋值,转换构造函数会执行哪些转换?

c++ - WIC中调用CreateBitmapFromHIcon时指定HICON索引

清除串口缓冲区

android - NDK Android - 无法同时构建 ARMv5 和 V7

linux - 忽略 libstdc++.so.5 依赖项的 gcc 选项

c++ - Boost/Property Tree 确定值类型

c++ - LNK1201 Visual C++ 2010 大型项目无法生成 PDB

c - 简单的 c malloc

c - 索引到数组中以读取数据(C ......我认为这是一个非常基本的问题)

c++ - 共享库加载和性能