2011-05-14 1 views
5

GCC> = 4.4 인 ocamlc-cc g++ 인수를 사용하여 C++ 표준 라이브러리 (예 : LLVM의 OCaml 바인딩)를 필요로하는 라이브러리에 링크하는 OCaml 프로젝트를 컴파일하면 다음과 같은 형태의 경고 메시지가 생성됩니다 :C++ 라이브러리와 링크 할 때 OCaml 컴파일에서 g ++ 지원 중단 경고를 어떻게 억제 할 수 있습니까?

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

이러한 경고를 제거 할 수 있습니까?

답변

6

이 문제는 최신 버전의 GCC에서 C++ 모드로 컴파일 할 때 경고를 트리거하는 중간 코드를 생성하는 ocamlc에서 발생합니다. 그러나이 생성 된 코드는 C++로 컴파일 할 필요가 없습니다. 래핑 된 C++ 라이브러리를 빌드하는 일반적인 경우에 -cc g++을 전달하는 유일한 이유는 C++ 표준 라이브러리 종속성이 빌드되었는지 확인하기 위해서입니다. ocamlc 중간 코드를 컴파일을위한 C++ 프론트 엔드를 사용하여 피할 간단한 해결책은 간단하다 : 아직 일반 C 모드를 컴파일하는 동안, libstdc++와 생성 된 C 코드를 연결 강제로

-cclib -lstdc++ 

.

+0

afaik ocamlc 코드를 c 컴파일러로 컴파일하고 연결시 '-cc g ++'를 사용하는 것이 더 좋습니다 (-lstdC++가 충분하지 않을 수도 있음). – ygrek

+0

공정한 점, 시도한 모든 환경에서 작동하지만. (g ++은 일반적으로 -lstdC++과 같은 일을하기 위해 GCC toolchain 환경을 구성하는 래퍼입니다.) OCamlBuild를 사용할 때 -cc g ++을 링커 인자로 강제로 전달하는 방법은 어떤 생각입니까? – jrk

+1

'flag [ "ocaml"; "link"; "native"] & atomize [ "-cc"; "g ++"]'는 작동해야 함 – ygrek

2

나는 그냥이를 억제하기 위해 C++에서

#pragma GCC diagnostic ignored "-Wwrite-strings" 

을 할 수 있다고 생각합니다.

+0

이것은 근본적인 문제를 해결하기보다는 회피합니다. OCaml의 표준 라이브러리는 C++에 익숙하지 않은 C를 사용하는 것이 더 큰 문제였습니다. 문제의 소스는 사용자가 소유하지 않지만 기본 시스템에 의해 소유되므로 경고를 억제하는 pragma를 추가하기 위해 소스를 모두 수정하는 것은 비실용적입니다. – jrk