我想探讨如何在不依赖libstdc++的情况下,支持rtti并链接C++程序。我尝试按照以下方式进行编译。如果有必要但缺失的符号,可以像示例中的strcmp函数一样进行定义,但是是否可以在没有显式mangle/demangle魔法的情况下定义typeinfo符号呢? 如果可能的话,该怎么做?
Linker说:
/tmp/cc6rBAef.o: 在函数 `main' 中:
那么,我该如何使用g++或clang++在源文件中定义'char的typeinfo'(_ZTIc@@CXXABI_1.3)呢?
注:不要问我为什么需要它,只是好奇。
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' 中:
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++在源文件中定义'char的typeinfo'(_ZTIc@@CXXABI_1.3)呢?
注:不要问我为什么需要它,只是好奇。
<typeinfo>
而不是"typeinfo"
,对吗? - Morwenn< >
搜索,但通常程序员应该使用< >
形式的头文件,以及" "
形式的超出实现控制范围的源文件。” - Jonathan Wakely