2012-12-07 4 views
4

ffmpeg와 Ogre를 모두 사용하는 프로젝트를 컴파일 중입니다. 이제 Windows에서 모든 것이 정상적으로 작동합니다.이상한 enum 이름 충돌

하지만 다음 코드 줄을 가진 파일을 컴파일 할 때 내가 가지고,

error: ‘AVPixelFormat’ is not a member of ‘Ogre’ 

여러 가지 방법으로 이상하다 :

Ogre::PixelFormat format = Ogre::PF_BYTE_RGBA; 

컴파일러는 다음과 같은 오류를 제공합니다 ::와 Ogre 네임 스페이스를 지정했을뿐만 아니라 Ogre에 AVPixelFormat도 없습니다. gcc는 "PixelFormat"과 "AVPixelFormat"을 어떻게 혼동합니까?

어떻게 제거 할 수 있습니까?

열거 형 대신 여기 int를 사용하고 싶지만 Ogre :: PixelFormat 형식이 필요한 다른 Ogre 함수가 필요합니다.

+0

'PixelFormat'은 어딘가에 매크로로 정의 된 것 같습니다. – Angew

답변

6

먼저 gcc -E을 사용하여 처리 한 다음 grep을 사용하여 AVPixelFormat 또는 PixelFormat을 찾는 파일을 처리합니다. #define 또는 typedef이 떠 다니는 것으로 의심됩니다.이 문제가 발생하는 곳을 찾아야하며 미리 컴파일 된 소스 파일이 분명해질 것입니다.

#define PixelFormat AVPixelFormat 

이도 네임 스페이스의 경우, 어디서나 자신의 코드에서 단어 "PixelFormat"을 사용하지 못하도록합니다 :

+0

아, 네. ffmpeg의 pixfmt.h에는 AVPixelFormat을 PixelFormat으로 정의한 매크로가있었습니다. – TheSHEEEP

+0

@ TheSHEEEP : 매크로가 죽는다는 증거를 말할 것입니다. (그런데 아마도이 대답을 받아 들여야합니다). –

+0

@djechlin :'typedef'는 제 지식이있는 한 그런 문제를 일으키지 않을 것입니다. –

3

문제는 avutil/pixfmt.h입니다.

이전 식별자를 사용하는 이전 소프트웨어에 대한 호환성 해킹입니다.

코드를 편집 할 수있는 경우 솔루션이 매우 간단합니다. ffmpeg 헤더를 포함하기 전에 C 코드에

#define FF_API_PIX_FMT 0 

을 추가하기 만하면됩니다.

#if FF_API_PIX_FMT 
#define PixelFormat AVPixelFormat 
... 

출처 : https://trac.ffmpeg.org/ticket/4216

P.S.

이는 경우 pixfmt.h 헤더를 비활성화 나는 그 질문이 오래되었다는 것을 알고 있지만 어쨌든 나는 아무 해결책도 없다고 느낀다. 그리고 나는 해결책을 필요로했다. 그래서 나는 그것을 덧붙였다.

+0

안녕하세요, http://stackoverflow.com/review/suggested-edits/13669700에서 편집 하시겠습니까? 그렇지 않다면 한 번에 그 토론과 버니 메르지를 만들어 봅시다. 그리고 3k + 담당자가 편집을 너무 많이하지 않는 사람이해야합니다. 건배. –

+0

안녕하세요, 그래, 그건 아주 불행하게도 선택된 태그이기 때문에 제 생각입니다. 총알 물리학이 훨씬 더 적절합니다. 많은 사람들이 발사체 및 탄환 점과 관련된 것들에 대해 총알을 추가합니다. 태그는 사라져야하고 나는 그것들을 모두 편집 할 것이라고 생각했다. (이것은 또한 내게 평판의 아름다운 양을 준다.)). 나는 tp가 나 자신을 배치 변경하는 것을 좋아할 것이다. 그러나 나는 평판이 없다. 태그를 태우기 전에 총알 물리학과 관련이없는 것들 (주로 발사체와 총알 포인트와 관련이있는 것들)을 정리하는 것이 좋을 것입니다. 이것은 내가 그들 중 몇 개를 위해 한 다른 편집입니다. 우리가 논의하자. – Ben