2012-08-17 25 views
7

GCC 4.5 çalışma zamanı kitaplığında ondalık kayan noktalara destek (http://gcc.gnu.org/gcc-4.5/changes.html) ekledi. Ad alanı std :: ondalık kullanarak, sonra da ondalık64 ve benzeri kod kullanarak kodları derleyebildim.Gnu C++ (g ++) içinde ondalık kayan nokta nasıl kullanılır?

Maalesef, kodu ilişkilendirmek için bazı kitaplıklar eksik. Hangi kütüphanelerin gerekli olduğunu öğrenemedim. DFP desteği, gcc (--enable-decimal-float = dpd)

'da etkinleştirildi. Ayrıca, kodda ondalık hazır bilgi sağlamanın hızlı bir yolu olmalı mı? Hızlı olarak, şablonlarla işlenen ve derleme zamanında tercüme edilen kullanıcı tanımlı sözcükleri kastediyorum. Çalışma zamanında dönüştürülen çiftler sağlamak istemiyorum (performansa ve derleme zamanından çalışma zamanına kadar gerçekten harekete geçemiyorum gerçeğine rağmen hala yuvarlama sorunları var ...). "Df" son ekini zaten buldum ancak derleyici tarafından tanınmıyor gibi görünüyor.

Hedef powerpc-ibm-aix7.1.0.0 üzerinde gcc sürüm 4.7.1 kullanıyorum.

Bağlayıcı hata iletileri:

ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatsisd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatsidd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatsitd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_mulsd3 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_muldd3 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_multd3 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatdisd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatunsdisd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatdidd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatunsdidd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatditd 
ld: 0711-317 ERROR: Undefined symbol: .__dpd_floatunsditd 

TIA.

+0

'_Decimal64' için sözdizimi eki, 'dd' ('df '_Decimal32' için)' dir, ancak bu, derleyiciyi tanımadığını açıklamıyor (DPD yordamlarından bahsetmeden). --enable-version-specific-runtime-libs'ı derleyiciye aktarmayı denediniz mi? –

+0

Gerçekten bu seçeneği derleyiciye iletmek mi istediniz? Tanınmadı. "g ++ -v", derleyicinin kendisinin belirtilen seçenek ile yapılandırıldığını gösterir. – user1034081

cevap

1

Kısa bir süre önce gcc4.7.1 kaynağından derledim ve eksik sembolü ile sorun yaşadım __floatunsidf. Bu libstdC++ tarafından istenen bir sembol olduğu ortaya çıktı ve libgcc_s.so dosyasında tanımlandı. Her iki kütüphanenin de gcc tarafından verildiği göz önüne alındığında, bunlar uyumlu olmalıdır. Benim durumumda hala bir hedefleyici, hedef platformumdan kaldırdığım eski bir libgcc_s sürümünü içeriyordum.

# to find out where libstdc++.so is: 
gcc -print-file-name=libstdc++.so 

# see if it references the symbol you're missing 
readelf -a "path to libstdc++.so" | grep "symbol name" 

yapıyor ve bunlardan her ikisinin de eksik sembolü tanımlarsanız libgcc_s görmek için daha sonra aynı şeyi Onun muhtemelen değer. Nb biri sembolü undefined olarak işaretler - bu, linker'ın gerekli olduğunu bilir.

İlgili konular