2014-09-21 198 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