2014-11-23 12 views
6

Bazı aramalar yaptım, tüm cevaplar clang yerine clang (veya gcc yerine g ++) kullanmanın önerisi gibi görünüyor. ilk yer. Yine de, sorunGizemli linker hatası "undefined reference için" __gxx_personality_v0 '"cygwin içinde clang kullanarak

clang++ -Wall -std=c++11 -o test.exe test.cpp A.cpp B.cpp etc.cpp 

veya

clang++ -lstdc++ -Wall -std=c++11 -o test.exe test.cpp A.cpp B.cpp etc.cpp 

derleme ve bağlama ya Cygwin g ++ ile çalışıyor ile devam etmektedir.

g++ -Wall -std=c++11 -o test.exe test.cpp A.cpp B.cpp etc.cpp 

Güncelleme: İşte

bağlama sırasında bilgidir. Clang g ++ yerine bağlantı için gcc kullanmaya çalışıyor mu? Bu durumda, neden -lstdC++ ve -lsupC++ aşağıda belirtildiği gibi işaretlemedi? Ben ayrıca web dolaşıp gibi

COMPILER_PATH=/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/:/usr/lib/gcc/x86_64-pc-cygwin/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/:/usr/lib/gcc/x86_64-pc-cygwin/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../x86_64-pc-cygwin/bin/ 
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../x86_64-pc-cygwin/lib/../lib/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../x86_64-pc-cygwin/lib/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../:/lib/:/usr/lib/ 
COLLECT_GCC_OPTIONS='-v' '-std=c++11' '-m64' '-o' 'testReSampling.exe' '-shared-libgcc' '-mtune=generic' '-march=x86-64' 
/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/collect2.exe --build-id -m i386pep --wrap _Znwm --wrap _Znam --wrap _ZdlPv --wrap _ZdaPv --wrap _ZnwmRKSt9nothrow_t --wrap _ZnamRKSt9nothrow_t --wrap _ZdlPvRKSt9nothrow_t --wrap _ZdaPvRKSt9nothrow_t -Bdynamic --dll-search-prefix=cyg --tsaware -o testReSampling.exe /usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../lib/crt0.o /usr/lib/gcc/x86_64-pc-cygwin/4.8.3/crtbegin.o -L/usr/lib/gcc/x86_64-pc-cygwin/4.8.3 -L/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../x86_64-pc-cygwin/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../x86_64-pc-cygwin/lib -L/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../.. -lsupc++ /tmp/misc-8020e8.o /tmp/DataStruct-b10944.o /tmp/HyperGeometricPVal-edef1c.o /tmp/Array2EG-3441bb.o /tmp/GOCats-ff22c1.o /tmp/UGraph-10cfd8.o /tmp/testReSampling-9fb18c.o -lstdc++ -lgcc_s -lgcc -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32 -lgcc_s -lgcc /usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../lib/default-manifest.o /usr/lib/gcc/x86_64-pc-cygwin/4.8.3/crtend.o 
/tmp/misc-8020e8.o:fake:(.eh_frame+0x47): undefined reference to `__gxx_personality_v0' 
/tmp/misc-8020e8.o:fake:(.eh_frame$_ZNSt6vectorISsSaISsEE5clearEv+0x13): undefined reference to `__gxx_personality_v0' 
/tmp/misc-8020e8.o:fake:(.eh_frame$_ZNSt6vectorISt4pairIjS0_ItdEESaIS2_EE5beginEv+0x13): undefined reference to `__gxx_personality_v0' 
/tmp/misc-8020e8.o:fake:(.eh_frame$_ZNSt6vectorISt4pairIjS0_ItdEESaIS2_EE3endEv+0x13): undefined reference to `__gxx_personality_v0' 
/tmp/misc-8020e8.o:fake:(.eh_frame$_ZNSt6vectorISt4pairIjS0_ItSt5arrayIdLm2EEEESaIS4_EE5beginEv+0x13): undefined reference to `__gxx_personality_v0' 
/tmp/misc-8020e8.o:fake:(.eh_frame$_ZNSt6vectorISt4pairIjS0_ItSt5arrayIdLm2EEEESaIS4_EE3endEv+0x13): more undefined references to `__gxx_personality_v0' follow 
collect2: error: ld returned 1 exit status 
clang: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation) 

cevap

1

Tamam, ben alakalı bir post, NOS cevabını bakın bulundu.

Cygwin64 terminali ile derlerken, Cygwin'in clang portunun 32 versiyon olduğunu fark ettim. Cygwin32 terminaline geçtikten sonra her şey iyi çalışıyor.

+0

örneğin clang++ helloworld.cpp -std=c++11 -fno-exceptions için derleme yaparken sadece komut satırında -fno-exceptions eklemek? – CMCDragonkai

+0

@CMCDragonkai, Cygwin'de sadece hataları yakalamak için clang64 kullanıyorum (renkli hata mesajlarının çok faydalı olması için şablonlardan yoğun bir şekilde faydalanıyorum), ama maalesef asla ikili üretmek için kullanılmıyor. Bunun nedeni, gxx_personality_v0 öğesinin, clang istisnalarının nasıl işlediğiyle ilişkili olması ve argo'nun yolunun, Windows'un bunlarla nasıl başa çıktığıyla uyumlu görünmemesidir. – CloudyTrees

+0

64bit cygwin'de clang/llvm öğelerini denedim ve goc_concepts ve 'linker' hataları gibi şeyler yapmaya devam ettim çünkü bir sebepten dolayı bağlantı kurmak için gcc kullanıyor. – CMCDragonkai

İlgili konular