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