在Windows上静态构建ffmpeg的未解析的外部

时间:2013-06-23 21:28:05

标签: windows ffmpeg static-linking

我将ffmpeg 1.2.1构建为静态lib - x64,debug。我试图打开一个与之相关的旧项目。在我的源代码中修改了一些已更改的API和类似内容之后,它编译得很好,但是我在链接时遇到了很多问题。

EDITED:完整的最新构建输出:

1>libavformat.a(mov.o) : error LNK2019: unresolved external symbol __imp__gmtime64 referenced in function mov_read_mvhd
1>libavutil.a(parseutils.o) : error LNK2001: unresolved external symbol __imp__gmtime64
1>libavformat.a(os_support.o) : error LNK2019: unresolved external symbol __imp__wsopen referenced in function ff_win32_open
1>libavcodec.a(pthread.o) : error LNK2019: unresolved external symbol __imp__beginthreadex referenced in function ff_thread_init
1>libavcodec.a(frame_thread_encoder.o) : error LNK2001: unresolved external symbol __imp__beginthreadex
1>libavutil.a(parseutils.o) : error LNK2019: unresolved external symbol __imp__localtime64 referenced in function av_parse_time
1>libavutil.a(parseutils.o) : error LNK2019: unresolved external symbol __imp__time64 referenced in function av_parse_time
1>libavutil.a(parseutils.o) : error LNK2019: unresolved external symbol __imp__mktime64 referenced in function av_parse_time
1>libmingwex.a(lib64_libmingwex_a-mingw_output_format.o) : error LNK2019: unresolved external symbol __mingw_get_msvcrt_handle referenced in function __mingw_set_output_format
1>libmingwex.a(lib64_libmingwex_a-mingw_get_codepage.o) : error LNK2001: unresolved external symbol __mingw_get_msvcrt_handle

我做错了什么?
我在这里错过了什么? ffmpeg今天在Windows平台上是否可以作为静态库工作,或者在每个新版本的Windows上它的功能都变得不那么强了?

1 个答案:

答案 0 :(得分:0)

手动插入

可以解决前8个错误
#define _CRTIMP

在某些文件中。这样可以防止错误使用declspec(__ dllimport)。我们正在构建一个静态库,而不是DLL,所以它不应该存在。我在构建ffmpeg之前运行configure时也尝试使用--extra-cflags='-D_CRTIMP',但它完全制动了构建。因此,手动方式是唯一的方法。

最后2个错误是总婊子:

libmingwex.a(lib64_libmingwex_a-mingw_output_format.o) : error LNK2019: unresolved external symbol __mingw_get_msvcrt_handle referenced in function __mingw_set_output_format
1>libmingwex.a(lib64_libmingwex_a-mingw_get_codepage.o) : error LNK2001: unresolved external symbol __mingw_get_msvcrt_handle

我在libmingw32.a中找到了这些符号(如果我没记错的话)。但是,当我链接它时,我与LIBCMTD.lib发生冲突。删除LIBCMTD.lib会产生大量未解决的外部因素。
所以,我想说今天我们无法在Windows上将ffmpeg构建为静态x64 lib。这是一种预期的方式,因为每个新版本都不太友好。