2014-09-21 152 views
2

我想在VS2010的C++项目中使用ffmpeg,而ffmpeg dev版本提供了.h文件的lib。我将这些.lib链接到我的项目中,运行.exe文件时需要相应的.dll文件。但是我想静态链接ffmpeg库并运行没有.dlls的文件。在Visual Studio中静态链接ffmpeg库

我试着用Mingw编译windows上的ffmpeg源代码,结果只有一些.a归档文件。如何获得ffmpeg静态.lib文件?它是一个64位程序,因此需要64位静态库。

回答

2

在您的输出目录中,您有一些*.def文件。您可以使用这些文件来获取您的*.lib文件。语法是:

lib /def:avcodec-54.def /out:avcodec-54.lib 

使用您的VS版本的lib.exe。矿区位于C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin。检查命令行选项(这可以添加/machine:i386)。

另一种方法:直接使用windows的cmd启动msys/mingw,首先启动VS命令提示符(可以从开始菜单启动它)。它会设置一些环境变量。从这里,用msys/mingw编译FFmpeg:FFmpeg build会自动检测VS是否存在,从而自动执行lib调用。

编辑:对不起,我跳过了问题的“静态”部分。下面是一些关于静态构建的技巧(注意,我从来没有在Visual Studio中构建一个静态的FFmpeg,所以它可能不起作用)。 首先,当然,FFmpeg的必须用静态选项构建:只是为了保险起见,我使用这些选项,所以我没有共享文件的.DEF:

./configure --enable-static --disable-shared [other options] 

为了让静态文件,你可以直接使用.a文件(再次:我从来没有这样做过)。检查this question

如果它不起作用,你可以尝试视觉工作室toochain而不是gcc。但要小心:我最后一次尝试这个(但共享的DLL),FFmpeg解码从msvc构建比gcc的输出更慢。有关详细的构建说明,请查看this page

+0

感谢您的回答。实际上,我用第二种方式编译了ffmpeg,只有* .def文件和* .a类型的静态库。我尝试使用lib.exe将* .def作为第一种方式传递给* .lib,并生成* .lib文件。但它们似乎不是根据文件大小的静态lib文件。它们与用于* .dll文件的* .lib文件具有相同的大小。 – 2014-09-24 02:01:01

+0

我完全错过了“静态”的观点,对不起。我用一些链接更新了我的答案,但我从来没有这样做过。 – biskitt 2014-09-24 07:26:47

+0

再次感谢您的帮助,我几乎知道如何在Windows中编译ffmpeg,我会尝试获取静态* .lib文件的这两种方法。 – 2014-09-25 15:21:26

相关问题