问题铛代码生成与-O0(Problematic clang code generation with

2019-10-22 05:16发布

下面的代码片段:

#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标志的组合是一个问题,所以我省略了其他人不会产生任何混淆。

文章来源: Problematic clang code generation with -O0
标签: clang clang++