2016-04-02 19 views
0

ile çalışır. Düzenleme: bu sorun benim kodumla ilgili değil, sorun olmaksızın çok sayıda başka sorun üzerinde test edilmiştir. Bu bir gcc çapraz derleme problemidir.C++ gcc-4.8.5 ile derlendiğinde fakat gcc-4.6.4 ile çalışıldığında istisnalar gözardı edilemez fakat gcc-4.6.4

Raspberry Pi 2 üzerinde çalıştırmak için Ubuntu x64 üzerinde g ++ ile büyük bir C++ programı derlemek çapraz. Gcc-4.6.4 kullanırken her şey çalışıyor gibi görünüyor. Gcc-4.8.5 kullanırken istisnalar sızıyor ve programın iptal edilmesine neden oluyor gibi görünüyor. Gcc-4.8.5 kullanarak en az bir istisna örneği yakalamayı denedim ve minimum durum düzgün çalışıyor gibi görünüyor. Benim gerçek programım çok daha karmaşıktır ve istisna yakalamak bir yerlerde kaybolmaktadır.

Özel durum işlenmesini iyileştirecek bazı g ++ ayarları var mı?

Birlikte toolchain derleme am crosstools-ng 1.22

Edit:

//error_function may be deeper in the stack 
void error_function() 
{ 
    throw std::runtime_error("This is an error"); 
} 

try 
{ 
    error_function(); 
} 
catch (std::exception&) 
{ 
    //Not being caught 
} 
+0

Bir C kütüphanesinden çağrılan bir C++ çağrısı dışında bir istisna atıyor olabilir misiniz? – rodrigo

+0

Sorunun, kodunuzda bir yerlerde olduğundan eminim. En az bir örnek çıkarın. –

+0

Bu kod, sorunsuz bir şekilde birçok platformda test edilmiştir. Sorun sadece gcc-4.8 armhf üzerinde gerçekleşir. Sorunu minimal bir örnekle yeniden üretemedim ve kod tescilli. – John

cevap

1

O0 sorunu çözmek gibi görünüyor ayarlayarak optimizasyon kapatılması: Bu kod ne yaptığını aslında. Bu hata gcc 4.8.5 ARMv6 sabit float kurmak için belirli gibi görünüyor.

+0

'gcc -c -Q -O0 --help = optimizers' gibi komutları kullanarak hangi * spesifik *' -f 'işaretinin sorun olduğunu bilemelisiniz. Özellikle, masaları gevşetmekle ilgili seçeneklere bakmayı deneyeceğim. – o11c

+0

Maalesef bu derleyici detayları seviyesine aşina değilim. Gcc -c -Q -O0 --help = optimize edicileri ve gcc -c -Q -O3 --help = optimize edicileri karşılaştıran bir macun oluşturduk. Önerin var mı? Her bir anahtarın test edilmesi oldukça uzun zaman alacaktır. http://pastebin.com/fMV8RhTv – John

+0

Tüm seçenekleri * bir kez * test etmek zorunda değilsiniz, bir seferde bunların yarısını test edebilirsiniz, 'O (log (n)) 'time. Bu yüzden "bisect" dedim. – o11c

İlgili konular