什么是弱外部符号以及它们何时生成?

时间:2016-08-16 10:00:08

标签: c++ gcc linker

我的C ++应用程序使用dlopen和朋友来实现一个插件系统,其中根据需要加载共享库。插件依赖于当前在可执行文件中定义的类。

我很惊讶地发现,插件无法以某种方式成功编译" 将插件链接到可执行文件"。换句话说,插件编译时没有相关类的定义。为了调查这种情况,我使用nm -m thePlugin.o查看了插件对象文件的符号。

nm的输出中,可执行文件中定义的符号列为(__TEXT,__textcoal_nt) weak external。关于weak symbols州的维基百科文章

  

链接二进制可执行文件时,弱声明的符号不会   需要一个定义

所以这似乎是编译成功的原因。

问题A:在哪些情况下会生成这些弱外部符号?这是一种可移植的机制(至少对于OS X和Linux而言)?

问题B:当我的插件引用静态分配的变量(静态类成员或全局extern变量)时,该符号不是weak external而是unknown和编译失败,可能是由于缺乏定义。我可以在外部使这些符号变弱,或者我可以用某种方式将我的插件与二进制文件链接起来吗?

0 个答案:

没有答案