【发布时间】:2013-06-17 07:08:19
【问题描述】:
我想研究如何在没有 libstdc++ 但支持 rtti 的情况下链接 C++ 程序。我尝试按照下面描述的方式编译它。我可以在示例中定义任何必要但不存在的符号,例如函数 strcmp,但是是否可以在没有显式 mangle/demangle 魔术的情况下定义 typeinfo 符号?如果可能的话怎么做?
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);
}
链接器说:
/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++ 在源文件中定义 'typeinfo of char'(_ZTIc@@CXXABI_1.3)?
PS。不要问我为什么需要它。只是好奇。
【问题讨论】:
-
我不知道“-nostartfiles”选项在这种情况下是否有帮助。
-
用不用都无所谓。问题是关于精灵符号的。想象一下,如果你愿意,我使用了“g++ ./ti.cc -nodefaultlibs -lc”。
-
它说找不到
_start函数。也许使用该选项它不会尝试找到它,而是您在应该创建的链接文件中提供的一个。 -
好的。我编辑了这个问题。谢谢你的评论。
-
你不应该包括
<typeinfo>而不是"typeinfo"吗?
标签: c++ linux rtti libstdc++ abi