C++运行时链接错误的含义?

Sun*_*hah 2 c++ dynamic-linking

我遇到了运行时错误.

anyfile.cpp(60):E_FATAL:无法启动进程libprocbase_so.so(/opt/company/processes/sharedbase_so.so:undefined symbol:_ZTV16CResourceManager)

我发现_ZTV16CResourceManager的含义是资源管理器的虚拟表,

知道为什么会这样吗?怎么解决?

Dav*_*eas 5

问题是,在加载动态库(sharedbase_so.so)时,它无法解析符号.尝试找到符号定义的库(如果有),并确保ld可以加载它(将其添加到路径中).如果它不存在于任何动态库中,请返回目标文件并尝试确定它的位置以及为什么它没有进入二进制文件.

这可能是一个问题的常见情况是大多数内联定义的类,如:

struct test {
   virtual void foo() {}
   //virtual void bar();
};
Run Code Online (Sandbox Code Playgroud)

如果行bar被注释掉,那么编译器将在包含它的所有翻译单元中生成vtable作为弱符号.如果bar取消注释,则编译器不会在每个转换单元中生成vtable,而只会在定义的转换单元中生成vtable test::bar.确保即使您不使用test::bar,目标文件也会在库中链接.