2012-02-10 17 views
5

-E ve -P seçeneklerini kullanarak ön işlem yaptığım bir kaynak dosyam var (vxWorks tabanlı bir gömülü platform için GCC 4.1.2'yi kullanın). Diğer tüm seçenekler, dosyayı derlediğimde aynıdır. Bu seçenekler şunlardır: tüm içerme yollarının yanı sıra:Önceden işlenmekte olan bir dosyayı derlemek çıktıyı çıktı

. Şimdi bu önceden işlenmiş dosyayı derlediğimde, ortaya çıkan nesne dosyası, orijinali doğrudan derlediğimden çok daha küçüktür (yaklaşık% 30). Ve daha sonra programı bağladığımda, linker, orijinal kaynak dosyasını kullanırken ortaya çıkmayan eksik sembollerden (hepsi kullanıcı kodunda) şikayet eder. Neden bir farklılık var? Bu işi yapmanın bir yolu var mı?

cevap

1

Komut satırınızda -D tanımını görmediğinizden emin misiniz? Sonuçlarınız, koşullu koşullar nedeniyle derlenmeyen bölümlerle tutarlı olacaktır.

Başka bir olasılık (özellikle derleyiciyi isimlendirmediğinizden), vxWorks ortamınız için ark'a özgü çapraz derleyici yerine genel bir gcc -E kullanıyor olmanızdır. Cross-gcc, gcc -E için ihtiyacınız olacak bazı değişkenleri önceden tanımlayacaktır.

+0

Nesne dosyasını, -E 've' -P 'bayrakını herhangi bir şey kaldırmadan ekleyerek düzenleyen bir kuralı değiştiriyorum, bu yüzden doğru derleyiciyi kullandığımdan ve tanımlar. –

1

Önceden işlenmiş çıkışı derlerken, GCC'ye ön işlem yapmamasını yeniden bildirmek için -fpreprocessed seçeneğini atlamayı deneyin.

Düşünebildiğim tek fark, önceden genişletilmiş bir makro adı olan bir tanımlayıcının genişletilmesiyle sonuçlanan makrolardır - önişlemci bu noktada genişletmeyi durdurur, ancak önişlemciyi tekrar çalıştırırsanız, tanımlayıcı tekrar genişledi. Bunun bir örneği muhtemelen bir derleyici hatasına neden olur, ama kim bilir?

İlgili konular