我有一个用C ++编写的共享库。它导出一个可见的界面 extern "C"
创建,销毁和操纵不透明类型的函数。
现在,我想要一个使用这个库的纯C程序。
我可以这样做(独立平台)吗?如果,C ++运行时和C ++静态对象何时初始化 main
是不是用C ++编写的?
我有一个用C ++编写的共享库。它导出一个可见的界面 extern "C"
创建,销毁和操纵不透明类型的函数。
现在,我想要一个使用这个库的纯C程序。
我可以这样做(独立平台)吗?如果,C ++运行时和C ++静态对象何时初始化 main
是不是用C ++编写的?
初始化阶段取决于平台。
对于Linux,动态加载的库可以具有自动调用的特殊声明符号 dlopen()
加载库时
请参阅联机帮助页 dlopen(3)
, 部分 过时的符号init()和fini() 了解更多信息。
静态初始值设定项隐式标记为 __attribute__((constructor))
,因此通常在加载共享库时,不必执行任何特殊操作。我怀疑在其他平台上这是相同或相似的。
初始化阶段取决于平台。
对于Linux,动态加载的库可以具有自动调用的特殊声明符号 dlopen()
加载库时
请参阅联机帮助页 dlopen(3)
, 部分 过时的符号init()和fini() 了解更多信息。
静态初始值设定项隐式标记为 __attribute__((constructor))
,因此通常在加载共享库时,不必执行任何特殊操作。我怀疑在其他平台上这是相同或相似的。
我可以这样做(独立平台)吗?
库加载是依赖于平台的操作。
何时初始化C ++运行时和C ++静态对象 如果main不是用C ++编写的?
无所谓。它们将在主要输入之前初始化。
通常,共享库系统有自己的入口点,而不是 main
但DLL有一个 DLLMain
其中实现可以放这样的代码。但是,在一般情况下,它不属于您的业务,它是您用于处理此问题的任何编译器的工作。