Uyarılar hata olarak değerlendirilmeden nasıl derlenir?


96

Sorun, Windows'ta iyi derlenen aynı kodun Ubuntu'da derlenememesidir. Bu hatayı her aldığımda:

cc1: warnings being treated as errors

Şimdi, büyük kod tabanı ve tüm uyarıları düzeltmeyi sevmiyorum.

Uyarılara rağmen başarılı bir şekilde derleyebilmemin bir yolu var mı?


1
Uyarıları düzeltmeyi şiddetle tavsiye ederim. Hemen değilse, yavaş yavaş. Kurtulduğunuzda, -Werroruyarıları kaldırdıktan sonra onu her dizin için ayrı ayrı ekleyebilirsiniz.
ugoren

Başarıyla derleseniz bile, beklediğiniz şekilde çalışmayabilir. Windows'ta gayet iyi çalışan, ancak Linux'ta hemen çöken kod yazan birkaç kişi oldu.
Dennis Meng

Faydalı yorumları ve cevapları için herkese teşekkürler. İhtiyaca göre başlattığım tüm uyarıları düzeltmem gerekiyor gibi görünüyor. Ama şimdi aldığım uyarı sqlite3.c'den geliyor: (X - c) <= X'in her zaman doğru olduğunu varsayarsak, işaretli taşmanın gerçekleşmediğini varsayarsak
Saurabh Verma

Yanıtlar:


84

Elbette, nerede -Werrorayarlandığını bulun ve bu bayrağı kaldırın. O zaman uyarılar sadece uyarılar olacaktır.


2
Teşekkürler Daniel, ama projemde -Werror bayrağı yok. Onu başka bir yerde aramalı mıyım?
Saurabh Verma

13
Ayarlanması gereken bir yerde, varsayılan olarak uyarılar tanıdığım herhangi bir derleyici tarafından hata olarak değerlendirilmez. -Wno-errorBulamazsanız, nightcracker'ın önerdiği gibi ile geçersiz kılmayı deneyebilirsiniz . Makefile'da -Werrorayarladığınız bayraklardan sonra geçilmediği sürece bu çalışmalıdır CFLAGS.
Daniel Fischer

33

Bu şekilde işlem gören tüm uyarıları kullanarak yapabilirsiniz -Wno-error. Hata olarak değerlendirilmesini istemediğiniz uyarının adı -Wno-error=<warning name>nerede <warning name>olduğunu kullanarak bu şekilde işlem gören belirli uyarılar yapabilirsiniz .

Tüm uyarıları tamamen devre dışı bırakmak istiyorsanız , kullanın -w(önerilmez).


Kaynak: http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html




4

Linux çekirdeğini derliyorsanız. Örneğin, "kullanılmayan-ama-set-değişkeni" uyarısını devre dışı bırakmak istiyorsanız hata olarak değerlendirilir. Bir ifade ekleyebilirsiniz:

KBUILD_CFLAGS += $(call cc-option,-Wno-error=unused-but-set-variable,)

Makefile dosyanızda


3

Tüm faydalı öneriler için teşekkürler. Sonunda kodumda hiçbir uyarı olmadığından emin oldum, ancak yine bu uyarıyı sqlite3'ten alıyordum:

Assuming signed overflow does not occur when assuming that (X - c) <= X is always true

Aşağıdaki CFLAG'yi ekleyerek düzelttim:

-fno-strict-overflow

Kodunuzdaki sorunlu yapılara işaret etmek için birçok uyarı vardır. Bunları devre dışı bırakmak, kısa perspektiften ilerlemenize izin verir, ancak bu sorunların uzun vadede sizi rahatsız etmek için geri dönüp dönmeyeceğini asla bilemezsiniz.
Benjamin Bannier

1
Evet haklısın. Kodumun uyarı içermediğinden emin olduğumu kastetmiştim (tüm uyarıları devre dışı
bırakmadım

3

-Wallve -Werrorderleyici seçenekleri buna neden olabilir, lütfen bunların derleyici ayarlarında kullanılıp kullanılmadığını kontrol edin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.