C++ &引用;typeinfo";未从动态库导出的符号

C++ &引用;typeinfo";未从动态库导出的符号,c++,clang,chromium,ld,C++,Clang,Chromium,Ld,我无法链接到定义一组我需要使用的类的动态库。我编译的代码试图链接类的typeinfo结构,但库没有导出它。但是,该类的虚拟表是 使用nm,我找到了我试图解析的符号: U___ztin3net14quicsdystreame 此类动态库中唯一的特殊符号是: S__ztvn3net14基流 我有两个问题: 为什么我的代码要查找此符号 我可以构建库以使其发出此符号吗 背景 我试图链接libnet.dylib,我通过Chromium组件构建了libnet.dylib。兴趣类别是。其所有虚拟函数都在中

我无法链接到定义一组我需要使用的类的动态库。我编译的代码试图链接类的typeinfo结构,但库没有导出它。但是,该类的虚拟表是

使用nm,我找到了我试图解析的符号:

U___ztin3net14quicsdystreame

此类动态库中唯一的特殊符号是:

S__ztvn3net14基流

我有两个问题:

  • 为什么我的代码要查找此符号
  • 我可以构建库以使其发出此符号吗
背景

我试图链接libnet.dylib,我通过Chromium组件构建了libnet.dylib。兴趣类别是。其所有虚拟函数都在中定义。QuicSpdyStream本身派生自一个纯虚拟函数
OnDataAvailable()

我的测试程序如下所示:

#包括
#包括“基本/宏.h”
#包括“net/quic/core/quic\u spdy\u stream.h”
#包括“net/quic/core/quic_types.h”
使用名称空间std;
类MyStream:public net::quicspdstream{
公众:
MyStream(net::QuicStreamId,net::QuicSpdySession*会话)
:net::quicspdstream(id,session){};
void OnDataAvailable()重写{};
私人:
不允许复制和分配(MyStream);
};
int main(int argc,字符**argv){
自动流=新的MyStream(net::QuicStreamId(1),NULL);

cout要解决此问题,您必须像Chromium一样编译代码,并使用以下命令禁用RTTI:
-fno RTTI

架构x86_64的未定义符号:“网络的类型信息::QuicSpdyStream”,引用自: net::MyStream的类型信息

这意味着编译器为您的类
MyStream
生成的运行时类型信息(RTTI)引用了其基类
net::quicspdestream
缺少的类型信息。这是因为Chromium在构建时默认禁用了RTTI[]

…默认情况下,Chromium构建没有RTTI, 但是一些消毒剂需要它,比如CFI诊断 和UBsan变体

如果您想(
configure
with
rtti
no\u rtti
),也可以在Chromium配置中启用它


需要RTTI,但有一个定义,允许在没有RTTI的情况下使用它。

我不知道这是否会解决它,但我认为您希望将
\include
更改为
\include“base/macros.h”编辑:可能不会修复它,但是我的陈述仍然是你应该把这三个变成引号-好的一点-我改变了它。但是你是正确的,没有修复它。我不这么认为。我绝对没有足够的C++经验来解决这个问题,或者回答你的问题。ile帮助?我添加了我的完整构建命令以供参考,您可能需要在不使用RTTI的情况下编译它
-fno RTTI
Cromium build by defaulr,并禁用RTTI