2011-05-14 26 views
5

GCC> = 4.4 ile ocamlc'a ocamlc argümanını kullanarak C++ standart kitaplığı (örn. LLVM'nin OCaml bağlamaları) gerektiren kütüphanelere karşı bağlantı oluşturan bir OCaml projesi derlenirken, formda son derece ayrıntılı uyarı hatası oluşur:C++ kitaplıklarıyla bağlantı kurarken OCaml derlemesindeki g ++ kullanım dışı bırakma uyarılarını nasıl önleyebilirim?

warning: deprecated conversion from string constant to ‘char*’ 

Bu uyarıları kaldırmak mümkün mü?

cevap

6

Sorun, GCC'nin daha yeni sürümleri tarafından C++ modunda derlendiğinde uyarıları tetikleyen ocamlc ara C kodu üreten kaynaklanıyor. Ancak bu üretilen kodun C++ olarak derlenmesi gerekmez. Sarılmış bir C++ kütüphanesine karşı bu yaygın durum için -cc g++'u geçmek için tek neden, C++ standart kütüphane bağımlılıklarının oluşturulmasını sağlamaktır. ocamlc ara kod derlemek için C++ ön uç ile kaçınır basit bir çözüm, basitçe: hala düz C modunda derleme sırasında, libstdc++ oluşturulacak C kodu bağlama kuvvetlerin

-cclib -lstdc++ 

.

+0

afaik, c derleyicisi ile ocamlc kodunu derlemek ve bağlantı sırasında '-cc g ++' kullanmak daha iyidir (-lstdC++ yeterli olmayabilir) – ygrek

+0

Adil, ancak bu, çalıştığım tüm ortamlarda çalışıyor. (g ++, genellikle GCC toolchain ortamını -lstdC++ gibi şeyler yapmak için yapılandıran bir sarmalayıcıdır.) OCamlBuild kullanırken sadece -g g ++ 'nın bağlayıcı bağlayıcısından nasıl geçeceği konusunda herhangi bir fikriniz var mı? – jrk

+1

'flag [" ocaml ";" link ";" native "] & atomize [" -cc ";" g ++ "]' çalışması gerekir – ygrek

2

ben sadece bu bastırmak için C++ olarak

#pragma GCC diagnostic ignored "-Wwrite-strings" 

yapabiliriz.

+0

Bu, sorunu çözmek yerine altta yatan sorunu tersine çevirir. Daha derin sorun, C++ 'yı dost olmayan C'nin kullandığı OCaml'ın standart kütüphanesiydi. Söz konusu kaynaklar kullanıcıya ait değil, altta yatan sistem tarafından, bu nedenle hepsini uyarı bastırma pragmaları eklemek için değiştirmenin pratik değildir. – jrk