没有libstdc ++的C ++ RTTI。可能吗?

没有libstdc ++的C ++ RTTI。可能吗?,第1张

概述没有libstdc ++的C ++ RTTI。 可能吗?

我想调查一下如何在不使用libstdc ++的情况下链接C ++程序,但支持rtti。 我试图按照下面描述的方式进行编译。 任何必要但缺席的符号,我可以在例子中定义像函数strcmp,但是有没有可能定义typeinfo符号没有明确的mangle / demangle魔术? 如果可能的话如何?

cd /tmp && cat << 'eof' >rtti.cpp && g++ -nodefaultlibs -lc rtti.cpp

extern "C" int strcmp(const char *s1,const char *s2) { return 0; }; #include "typeinfo" int main(){ return typeID(int) == typeID(char); }

linker说:

/tmp/cc6rBAef.o:在函数`main'中:

“ABI-volatile”寄存器在函数调用中被视为非易失性

windows和ABI兼容性

windows x64 ABI。 deBUGging器如何显示传递给函数的参数

arm版本之间的区别?(仅适用于ARMv7)

在x86-64调用约定中返回值

rtti.cpp:(.text+0x18): undefined reference to `typeinfo for char' rtti.cpp:(.text+0x1d): undefined reference to `typeinfo for int' collect2: error: ld returned 1 exit status

那么,如何在源文件中使用g ++或clang ++来定义'charinfotypes信息'(_ ZTIc @@ CXXABI_1.3)呢?

PS。 不要问我为什么需要它。 只是一个好奇心。

G ++ ABI兼容性列表

使用Boost向后兼容ABI创build库

每个cpu arch真正的ELF TLS ABI要求是什么?

ELF生成使用libelf提示

64位系统的整数大小差异(与旧的32位PC系统混淆)

由于RTTI所需的符号似乎在libstdc++库中,所以如果没有它,就无法完成。 请注意,我通过运行发现了这一点

readelf -Ws `g++ -print-file-name=libstdc++.so` | awk '{print $8}' | c++filt | grep 'typeinfo for'

但是,您可以执行的 *** 作是静态链接到libstdc++ :

g++ -static-libstdc++ rtti.cpp

通过这种方式,您不会对libstdc++有任何动态的依赖关系,只有实际需要的符号被引入到您的可执行文件中。 (好吧,包含所需符号的目标文件中的所有符号,例如,我想是基本类型信息。)

感谢gcc社区的提示。

答案是:

“gcc使用一些魔法来将__fundamental_type_info的析构函数替换成一组typeinfo符号”

替换代码放在文件中:gcc-4.7.2 / gcc / cp / rtti.c, voID emit_support_tinfos(voID);

rtti.cc:

#include <typeinfo> namespace __cxxabiv1 { class __fundamental_type_info:public std::type_info{ public: explicit __fundamental_type_info(const char* __n) : std::type_info(_n) { } virtual ~__fundamental_type_info(){}; }; } int main(){ return typeID(int) == typeID(char); }

在编译期间,所有的基本类型都被插入到目标文件中。

$g++ -c ./rtti.cc;readelf -sW ./rtti.o |c++filt|grep typeinfo|wc -l

$153

所以这个问题就回答了。

总结

以上是内存溢出为你收集整理的没有libstdc ++的C ++ RTTI。 可能吗?全部内容,希望文章能够帮你解决没有libstdc ++的C ++ RTTI。 可能吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1254532.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存