Ben daha önce derlenmiş bir C++ program var ama Jamfiles ile mucking sonra, program artık derlenmiş ve ld
bir duplicate symbol error
yayılan kökenini anlamak. Bu arka arkaya bjam clean
çalışan elle nesneleri kaldırma ve MacOS 10.6.7 4.2.1 gcc gcc ön ucu ile tınlamak geçiş, orijinal Jamfiles döndükten sonra da devam etmiştir.bir bağlayıcı yinelenen sembol hata
programın basitçe şöyle açıklanabilir main.o
bağlı bir statik kütüphaneye derlenir main.cpp
ve dört dosyaları a.h,cpp
ve b.h,cpp
, olmasıdır. Her ikisi de, main.cpp
ve b.cpp
, iki farklı ara dosya aracılığıyla, off.h
hatalı sembol içeren dosyaya bağlıdır, ancak ne a.h
ne de a.cpp
hiçbir şekilde off.h
'a bağlıdır. Sormadan
, ben tüm dosyaları birden tanım korumaları (#ifndef
, #define
, #endif
) sarılı emin yaptı ve onları eksik bir dosya buldunuz iken, bu off.h
referans vermedi. Daha da önemlisi, b.h
off.h
başvuran bir şey, sadece uygulama, b.cpp
içermez, off.h
için herhangi bir başvuru yapar. Bu yalnız beni şaşırttı.
Karm şaşkınlığımı eklemek için,numaralı telefonu b.cpp
numaralı başvurudan kaldırmayı başardım ve beklendiği gibi başarıyla yeniden derledim. Ancak, referansı tekrar eklediğimde, ayrıca başarıyla derlenmiş ve nesne dosyalarını temizledikten sonra bunu yapmaya devam etmiştir. Ben, özellikle sembollerin çatışmaya girmemesi, sembollerin çoğalmasını engellediğimi ve önceden/tamamlanmamış yapılardan kurtulmuş olduğumu düşünerek, neden derlenemediğiyle ilgili bir kayıp yaşıyorum.
başarıyla programımı derlemek başardı beri
, ben herhangi bir öneri test etmek onu yeniden üretmek mümkün olacak şüpheliyim. Bununla birlikte, bunun nasıl olabileceğine meraklıyım ve eğer gelecekte bu davranışla karşılaşırsam, ne yaparsam yapmamın ötesinde, onu düzeltmek için ne yapabilirim?
Sen kendini yeniden olamaz bir hata teşhis etmemizi bekliyorsunuz? –
@Neil, öyle değil. Not: Bir "çözüm" e girene kadar bu problemi derlemek için sayısız girişimde bulunabiliyordum. Ve sorunun tekrar ortaya çıkmamasından dolayı cevapların daha teorik olmasını bekliyorum. Bununla birlikte, iki ayrı derleme biriminde atıfta bulunulan bir sembolün, herhangi bir çatışma olmaması gerektiğinde çatışmaya neden olabilecekleri konusunda daha iyi bir anlayış elde etmeye çalışıyorum.Ve eğer varsa, sorunu kendim teşhis etmek ve hafifletmek için alabileceğim ek adımlar. – rcollyer
Bunu% 90 şans verdim, aslında aslında tüm nesne dosyalarını temizlemediniz (belki libtool veya bir şey gizli bir dizinde saklıyordu?). Yine de, eğer onu üretemezseniz, bunun altına ulaşmak için bir yol yoktur. – bdonlan