2017-10-20 11 views
0

J'essaie de compiler une grande base de code avec g ++ sous cygwin. Compilation échoue, et je l'ai réduit le problème au cas de test autonome suivant:Erreur de définition multiple dans la compilation statique avec g ++ sous cygwin

fichier main.cpp:

#include <stdexcept> 
int main() { 
    std::logic_error One("One"); 
    std::logic_error Two(One); 
    return 0; 
} 

commande de compilation et résultat:

$ g++ -std=c++11 -static main.cpp 
/usr/lib/gcc/x86_64-pc-cygwin/6.4.0/libstdc++.a(cow-stdexcept.o): In function `std::logic_error::logic_error(std::logic_error const&)': 
/usr/src/debug/gcc-6.4.0-1/libstdc++-v3/src/c++11/cow-stdexcept.cc:59: multiple definition of `std::logic_error::logic_error(std::logic_error const&)' 
/tmp/ccCSKFES.o:main.cpp:(.text$_ZNSt11logic_errorC1ERKS_[_ZNSt11logic_errorC1ERKS_]+0x0): first defined here 
collect2: error: ld returned 1 exit status 

Le fichier compile et liens sur CentOS avec g ++ 5.3.1 et 6.3.1. Il ne parvient pas à lier sous cygwin avec g ++ 6.3.0 et 6.4.0. Il compile et lie toujours si je omets le drapeau "-static". Est-ce un bug dans g ++ sous cygwin, ou est-ce qu'il y a quelque chose qui ne va pas dans mon code?

Répondre

0

Vous pouvez essayer avec

g++ -Wl,--allow-multiple-definition -static -Wall main.cpp 

Mais si je me souviens bien des exceptions C ne fonctionnent pas très bien avec une accumulation d'électricité statique sur Cygwin.