2013-12-12 2 views
1

/INCREMENTAL:NO은 Visual C에서 릴리스 구성의 기본값입니다./INCREMENTAL과 링크 할 때 빈 가져 오기 테이블 : 일부 DLL의 라이브러리를 가져 오는 경우 NO

FFmpeg git-3efe5e3 32-bit Devhttp://ffmpeg.zeranoe.com/builds/에서 다운로드했습니다. .dll.a.lib 개의 파일이 있습니다. 나는 .lib을 선택했다. ffmpeg dll을 가져 오기 테이블을 컴파일 한 후 비어 있으며 프로그램이 충돌합니다. /INCREMENTAL을 활성화하면 컴파일되고 정상적으로 실행됩니다.

test.c

:

void av_register_all(); 

int main() { 
    av_register_all(); 
    return 0; 
} 

_

그것은 Zeranoe에서 사용되고 binutils에 공지 된 버그는 FFmpeg 빌드된다
lib>cl test.c /link /incremental:no avformat.lib ws2_32.lib 
lib>dumpbin /IMPORTS test.exe 
... 
    avformat-55.dll 
       4080F4 Import Address Table 
       4095E4 Import Name Table 
        0 time date stamp 
        0 Index of first forwarder reference 


    KERNEL32.dll 
       408000 Import Address Table 
       4094F0 Import Name Table 
        0 time date stamp 
        0 Index of first forwarder reference 

        143 GetCurrentProcessId 
        110 GetCommandLineA 
        216 HeapFree 
... 

답변

1

. 기본적으로 Microsoft Visual Studio 릴리스 빌드에서 링커 옵션> 최적화> 참조 = /OPT:REF으로 모든 FFmpeg 참조를 제거하므로 dumpbin /IMPORTS에 표시되지 않습니다.

4.2.1 Linking to FFmpeg with Microsoft Visual C++ 지침을 따라야합니다. 두 가지 옵션이 있습니다. 링커 옵션에 /OPT:NOREF을 지정하십시오.이 옵션은 실행 파일의 크기가 증가하고 실행 파일의 초기로드 시간이 늘어남 으로 인해 권장되지 않습니다. 또는 x86_64에, 예를 들어, .def에서 새로운 .lib.exp 파일을 생성 :

lib /machine:x64 /def:avcodec-55.def /out:avcodec.lib 
lib /machine:x64 /def:avdevice-55.def /out:avdevice.lib 
lib /machine:x64 /def:avfilter-4.def /out:avfilter.lib 
lib /machine:x64 /def:avformat-55.def /out:avformat.lib 
lib /machine:x64 /def:avutil-52.def /out:avutil.lib 
lib /machine:x64 /def:postproc-52.def /out:postproc.lib 
lib /machine:x64 /def:swresample-0.def /out:swresample.lib 
lib /machine:x64 /def:swscale-2.def /out:swscale.lib 

또 다른 옵션은 youself로는 FFmpeg을 구축하는 것입니다.

또 다른 옵션은 FFmpeg dev 커뮤니티에 가입하고 autotools/autoconf/automake에서 CMake로 빌드 시스템을 이동하는 것입니다.

중재자, 제발 고장난 영어를 수정하십시오.

+0

와우, .c 파일없이 가져 오기 라이브러리를 만들 수 있다고 상상하지 못했습니다. – basin