下面的代码片段:
#include <string>
#include <iostream>
int main()
{
std::string s = std::to_string(5);
std::cout << s << std::endl;
return 0;
}
失败给出下面的选项在Windows(伴随着GCC 4.8.2头文件和库)铿锵3.6链接:
clang++ -std=c++11 -static -O0 bug.cpp
请注意,以-02片断编译和链接正常,所以我怀疑它可能是某种铛的bug。
编辑1:我忘了把链接错误:
F:/Programs/LLVM/bin/../lib/gcc/i686-w64-mingw32/4.8.2\libstdc++.a(string-inst.o):(.text$_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag[__ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag]+0x0): multiple definition of
`char* std::string::_S_construct<char*>(char*, char*, std::allocator<char> const&, std::forward_iterator_tag)'
C:\Users\THEART~1\AppData\Local\Temp\bug-b5df09.o:(.text[__ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag]+0x0): first defined here
F:/Programs/LLVM/bin/../lib/gcc/i686-w64-mingw32/4.8.2\libstdc++.a(string-inst.o):(.text$_ZNSsC2IPcEET_S1_RKSaIcE[__ZNSsC2IPcEET_S1_RKSaIcE]+0x0): multiple definition of `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<char*>(char*, char*, std::allocator<char> const&)'
C:\Users\THEART~1\AppData\Local\Temp\bug-b5df09.o:(.text[__ZNSsC2IPcEET_S1_RKSaIcE]+0x0): first defined here
F:/Programs/LLVM/bin/../lib/gcc/i686-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ld.exe: C:\Users\THEART~1\AppData\Local\Temp\bug-b5df09.o: bad reloc address 0x10 in section `.text[__ZSt9to_stringi]'
collect2.exe: error: ld returned 1 exit status
clang++.exe: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation)
编辑2:我一直在问我为什么在编译标记添加静态标志。 我的目的是生成全静态链接可执行程序,而不需要一些GCC的DLL(的libstdc ++ 6.dll libwinpthread.dll等),所以我大多已被编译使用此命令的:
clang++ -std=c++11 -static -static-libstdc++ -static-libgcc -O0 bug.cpp
我一直在使用与海湾合作委员会也产生全静态可执行文件。 一些尝试后,我注意到的 - 静态和-O0标志的组合是一个问题,所以我省略了其他人不会产生任何混淆。