从C调用的C++共享库

Ale*_* C. 11 c c++ portability shared-libraries

我有一个用C++编写的共享库.它导出一个可见的界面,extern "C"该界面由创建,破坏和操纵不透明类型的函数组成.

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

我可以这样做(平台独立)吗?如果main没有用C++编写,C++ 运行时和C++静态对象什么时候会被初始化?

oni*_*ake 5

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

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

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