C std库链接不同的C标准
我正在使用Cygwin编译一个项目(GCC v4.5.0),我遇到了奇怪的链接器问题.我希望有一些专业知识的人可以提供帮助.
但是,当我使用gcc编译器标志进行编译时,链接才会失败: 一些说明: >我通知gcc手动链接标准库和编译器标志:-lstdc 问题: >编译后的标准库通常是否包含不同C标准的不同符号? 在此先感谢大家. -jt 解决方法
是的,标准和技术报告的新版本都对标准库的内容进行了许多更改.您引用的函数(std :: string的移动构造函数)是在C 0x的标准库中新添加的.
该标准的版本不影响名称修改,虽然编译器版本确实如此,并且需要更新的编译器以获得更好的C 0x支持,因此它似乎是相关的. 您可能使用过旧版本的libstdc. 编辑:基本故障排除: $find /usr -name libstdc++.a /usr/lib/gcc/i686-pc-cygwin/4.5.0/libstdc++.a $cygcheck -f /usr/lib/gcc/i686-pc-cygwin/4.5.0/libstdc++.a libstdc++6-devel-4.5.0-1 $nm -C /usr/lib/gcc/i686-pc-cygwin/4.5.0/libstdc++.a | grep basic_string | grep '&&' 00000000 T std::basic_string<char,std::allocator<char> >::basic_string(std::string&&) 00000000 T std::basic_string<char,std::allocator<char> >::basic_string(std::string&&) 00000000 T std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::assign(std::basic_string<wchar_t,std::allocator<wchar_t> >&&) 00000000 T std::basic_string<wchar_t,std::allocator<wchar_t> >::basic_string(std::basic_string<wchar_t,std::allocator<wchar_t> >::operator=(std::basic_string<wchar_t,std::allocator<wchar_t> >&&) 这看起来确实有点滑稽. std :: wstring的定义(即std :: basic_string< wchar_t,std :: char_traits< wchar_t>,std :: allocator< wchar_t>>)看起来是正确的,窄版本没有.名称std :: string不应该存在到mangling阶段,因为它只是一个typedef. 但是,我在linux上得到相同的输出: % find /usr -name libstdc++.a /usr/lib64/gcc/x86_64-pc-linux-gnu/3.4.6/libstdc++.a /usr/lib64/gcc/x86_64-pc-linux-gnu/3.4.6/32/libstdc++.a /usr/lib64/gcc/x86_64-pc-linux-gnu/4.5.2/libstdc++.a /usr/lib64/gcc/x86_64-pc-linux-gnu/4.5.2/32/libstdc++.a % nm -C /usr/lib64/gcc/x86_64-pc-linux-gnu/4.5.2/libstdc++.a | grep basic_string | grep '&&' 0000000000000000 W std::basic_string<char,std::allocator<char> >::basic_string(std::string&&) 0000000000000000 W std::basic_string<char,std::allocator<char> >::basic_string(std::string&&) 0000000000000000 W std::basic_string<wchar_t,std::allocator<wchar_t> >&&) 0000000000000000 W std::basic_string<wchar_t,std::allocator<wchar_t> >&&) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |