C++ &引用;typeinfo";未从动态库导出的符号
我无法链接到定义一组我需要使用的类的动态库。我编译的代码试图链接类的typeinfo结构,但库没有导出它。但是,该类的虚拟表是 使用nm,我找到了我试图解析的符号: U___ztin3net14quicsdystreame 此类动态库中唯一的特殊符号是: S__ztvn3net14基流 我有两个问题:C++ &引用;typeinfo";未从动态库导出的符号,c++,clang,chromium,ld,C++,Clang,Chromium,Ld,我无法链接到定义一组我需要使用的类的动态库。我编译的代码试图链接类的typeinfo结构,但库没有导出它。但是,该类的虚拟表是 使用nm,我找到了我试图解析的符号: U___ztin3net14quicsdystreame 此类动态库中唯一的特殊符号是: S__ztvn3net14基流 我有两个问题: 为什么我的代码要查找此符号 我可以构建库以使其发出此符号吗 背景 我试图链接libnet.dylib,我通过Chromium组件构建了libnet.dylib。兴趣类别是。其所有虚拟函数都在中
- 为什么我的代码要查找此符号
- 我可以构建库以使其发出此符号吗
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
withrtti
或no\u rtti
),也可以在Chromium配置中启用它
需要RTTI,但有一个定义,允许在没有RTTI的情况下使用它。我不知道这是否会解决它,但我认为您希望将\include
更改为\include“base/macros.h”编辑:可能不会修复它,但是我的陈述仍然是你应该把这三个变成引号-好的一点-我改变了它。但是你是正确的,没有修复它。我不这么认为。我绝对没有足够的C++经验来解决这个问题,或者回答你的问题。ile帮助?我添加了我的完整构建命令以供参考,您可能需要在不使用RTTI的情况下编译它-fno RTTI
Cromium build by defaulr,并禁用RTTI