2012-07-02 2 views
2

libavformat 주위에 비디오 읽기 코드를 빌드하려고합니다. 컴파일 된 DLL 및 .lib 파일 here을받은 후, 나는 내 코드를 빌드로 이동하고, 링커는 I가 제공 .lib 파일에 연결 한 경우에도 libavformat 기호 중 하나를 찾을 수 없습니다.Visual Studio 2010에서 libavformat 연결

libavformat.libdumpbin -headers으로 검사하면 밑줄 접두사가있는 원하는 기능이 내보내집니다. 예를 들어 avformat_open_input을 호출하려고하는데 .lib 파일은 _avformat_open_input입니다.

왜 이런 일이, 그리고 왜 미리 컴파일 된 DLL을 링크 할 수 없습니다?

+0

응용 프로그램 x64 플랫폼도 있습니까? 또한 여기에 정확한 오류 메시지를 복사하십시오. – hege

+0

난 그냥 32 비트 응용 프로그램을 구축하고 있습니다. 오류 LNK2019 : 링커 오류가 당신의 전통적인 LibavVideoReader.obj입니까? 확인되지 않은 외부 기호 "INT __cdecl avformat_open_input (구조체 AVFormatContext * *, 숯불 CONST *, 구조체 AVInputFormat *, 구조체 AVDictionary * *)"(avformat_open_input @@ YAHPAPAUAVFormatContext @ @ PBDPAUAVInputFormat @@ PAPAUAVDictionary @@@ Z) 함수에서 참조 ... 메시지 –

+2

당신은 C로 또는 C++과 같은 코드를 컴파일하고 있는가? 후자의 경우, 해당 라이브러리의 C 선언이'extern "C"'에 래핑되었는지 확인 했습니까? – ildjarn

답변

7

당신은 MSVC++libav를 사용하는 모든 작업을 다음을 수행해야합니다. 먼저 고토 Zeranoe

  1. 다운로드 Shared 버전, bin 폴더에서 모든 .dll 파일을 복사하고 exe가 생성 될 출력 디렉토리에 붙여 넣습니다.
  2. 다운로드 Developer 버전, lib 폴더에서 모든 .lib 파일을 복사하여 기본 C++ 파일이있는 그들을 붙여 넣기 (예를 들어, 당신이 Folder-2에서 .lib 파일을 넣어 그래서 Folder-1.sln 파일이 Folder-1\Folder-2) Developer 버전에서
  3. 당신 include 폴더에서 모든 디렉토리 2 단계 사본에서 다운로드 폴더-2에 붙여 넣을이 위치 C:\Program Files\Microsoft Visual Studio 10.0\VC\include\ 폴더에 저장,
  4. 다운로드 inttypes.hstdint.h (2 단계에서 폴더-2에 대한 자세한 내용을 참조하십시오).
  5. 이 헤더 파일은 다음과 같은 구문

를 사용 포함하려면 당신은 libavC 라이브러리이 extern 때문에 사용해야합니다.

extern "C" { 
    #include "libavcodec/avcodec.h" 
    #include "libavdevice/avdevice.h" 
    #include "libavfilter/avfilter.h" 
    #include "libavformat/avformat.h" 
    #include "libavutil/avutil.h" 
} 
0

은 32 비트 라이브러리를 가져 오기 당신은 괜찮을 것 : 귀하의 응용 프로그램 플랫폼은 사용 라이브러리 (및 VICA 반대)와 일치한다.

+0

32 비트를 사용하고 있습니다. 그렇지 않으면 어떻게 믿을 수 있습니까? –

+0

함수 이름 데코 레이팅입니다. 좋은 라이브러리를 선택하셨습니까? _ExportedNameUnderscore와 함께 시작하는 것은 x64 장식입니다. – hege

+0

그것은 C/C++ 문제였습니다. 'extern "C"{}'에 헤더를 래핑하면 모든 것이 수정되었습니다. –

0

.lib 정적 라이브러리로 컴파일하는 것은 어떻습니까?