2011-05-14 9 views

Odpowiedz

6

Problem wynika z ocamlc generowania pośredniego kodu C, który wyzwala ostrzeżenia po kompilacji w trybie C++ przez nowsze wersje GCC. Ale wygenerowany kod nie musi być kompilowany jako C++. Jedynym powodem, aby przekazać -cc g++ dla tego wspólnego przypadku budowania z owiniętą biblioteką C++ jest zapewnienie, że budowane są zależności bibliotek standardowych C++. Im prostsze rozwiązanie, w którym unika się za pomocą C++ front-end do zestawiania kodu pośredniego z ocamlc jest prosta:

-cclib -lstdc++ 

który wymusza powiązanie kodu wygenerowanego C z libstdc++, jeszcze zestawiania w trybie zwykłym C.

+0

afaik lepiej skompilować kod ocamlc z kompilatorem c i użyć "-cc g ++" podczas łączenia (-lstdC++ może nie być wystarczający) – ygrek

+0

Fajny punkt, chociaż działa to we wszystkich środowiskach, które wypróbowałem. (g ++ jest ogólnie po prostu otoką, która konfiguruje środowisko toolchain GCC do robienia rzeczy takich jak -lstdC++). Dowolny pomysł, jak wymusić -cc g ++, aby był przekazywany jako argument linkera podczas używania OCamlBuild? – jrk

+1

'flaga [" ocaml "," link "," natywny "] i atomize [" -cc "," g ++ "]' powinien działać – ygrek

2

myślę, że można po prostu zrobić

#pragma GCC diagnostic ignored "-Wwrite-strings" 

W C++, aby stłumić to.

+0

Odsuwa to podstawowy problem, zamiast go rozwiązywać. Głębszym problemem była standardowa biblioteka OCamla używająca C, która nie była przyjazna dla C++. Źródła, o których mowa, nie są własnością użytkownika, ale systemu bazowego, więc modyfikowanie ich wszystkich w celu dodania pragmatyzacji ostrzeżenia jest niepraktyczne. – jrk

Powiązane problemy