2011-03-17 16 views
5

32bit SLES10 makinesinde yapıyorum. İşte GCC 3.4.2Lütfen bu bağlantı hatasını açıklayın: .rodata bölümündeki başvurulan

kullanma örnek bir hatayı

`.L8245' referenced in section `.rodata' of CMakeFiles/myproj.dir/c++/util/MyObj.o: defined in discarded section 
`.gnu.linkonce.t._ZN5boost9re_detail9reg_grep2INS0_21grep_search_predicateIPKcSaIcEEES4_cNS_12regex_traitsIcEES5_S5_EEjT_T0_SA_RKNS_14reg_expressionIT1_T2_T3_EEjT4_' of CMakeFiles/myproj.dir/c++/util/MyObj.o 

cevap

5

olan bu nedeniyle 2 farklı .Cpp farklı derleyici anahtarlar ile derlenmiş olan tipik - ama aynı şablonları kullanarak. Oluşturulan şablon örneklemeleri tanımladıkları/referansladıkları şekilde farklılık gösterebilir ve seçili örnekleme atılanlar ile aynı sembolleri göstermiyorsa/bu hataya sahipseniz, bu hatayı alabilirsiniz.

Tüm .cpp'lerin aynı derleyici anahtarlarıyla derlendiğini ve tanımlandığını doğrulayın. Bu mümkün değilse, linker komut satırındaki .obj dosyalarını yeniden düzenleyin, özellikle hata iletisinde belirtilen .obj dosyalarını .obj dosya listesinin sonuna veya sonuna taşıyın.

DÜZENLEME: Bu kütüphaneler oluşturmak için kullanılan derleyici anahtarlarını çoğaltmak eğer

Ayrıca

, sen önceden oluşturulmuş c karşı bağlıyoruz eğer ++ kütüphaneleri, bkz.

+0

+1 İşletim sisteminizi (durumumda Ubuntu) güncellerseniz, yeni gcc/ld ile yeniden oluşturmadan önce temizlediğinizden emin olun. Daha önce oluşturduğunuz üçüncü taraf kitaplıklarını da yeniden oluşturmanız gerekebilir. – kfmfe04

3

Bu, binutils'in daha yeni bir sürümünü kullanmasından kaynaklanabilir. binutils sürüm 2.15 bunu ölümcül olmayan bir hata olarak ele aldı, ancak daha sonra binutils sürümleri değişti ve bağlantı başarısız oldu. Benzer bir rapor için bkz. https://bugzilla.redhat.com/show_bug.cgi?id=191618.

Durumumda, binutils 2.17 yerine, binutils 2.16.1'i açıkça kullanarak bir kez daha bağlantı kurabildim.