使用 static linked library 的方式做
gcc version 4.6.2 (GCC)

mingw 做成 lib 語法
ar rcs ffmpeg.lib ../../obj/MinGW32/ffmpeg/*.o ../../obj/MinGW32/ffmpeg/libavcodec/x86/*.o ../../obj/MinGW32/ffmpeg/libavcodec/*.o ../../obj/MinGW32/ffmpeg/libavfilter/x86/*.o ../../obj/MinGW32/ffmpeg/libavfilter/*.o ../../obj/MinGW32/ffmpeg/libavutil/x86/*.o ../../obj/MinGW32/ffmpeg/libavutil/*.o ../../obj/MinGW32/ffmpeg/libpostproc/*.o ../../obj/MinGW32/ffmpeg/libswscale/x86/*.o ../../obj/MinGW32/ffmpeg/libswscale/*.o
(.a 檔與 VS 建置出來的 lib 基本是一樣的)

VC2010 加入 mingw 產生的 lib
專案屬性->Linker->General->Additional Library Directories->lib_x86 底下放入 libgcc.a libmingwex.a ffmpeg.lib
專案屬性->Linker->Input->加入三個 libgcc.a libmingwex.a ffmpeg.lib

改成使用 static link library 的方式做, 用 mingw 做成 lib 會 fail 在 __mingw_aligned_malloc 的地方
解決方式:
在 Makefile 裡面將 __mingw_aligned_malloc 重新定義為 _aligned_malloc
  #define __mingw_aligned_malloc _aligned_malloc
  #define __mingw_aligned_realloc _aligned_realloc
  #define __mingw_aligned_free _aligned_free


以下方法不起作用
無解! 放棄了...

1.
有人說是因為 win7 dep 保護的關係
所以把它關掉就好了
參考資料1

但是什麼原因會讓 dep 會阻擋該 dll 呢?
因為該 dll 缺少了 IMAGE_SCN_MEM_EXECUTE 屬性
那要怎麼解決這個問題呢?
(1) 把 IMAGE_SCN_MEM_EXECUTE 加進去 dll
(2) loadlibrary 前用程式關掉 dep 保護
參考資料2
(3) 不使用 loadlibrary 改用其他方式, 也就是繞過去的意思

PE 說明
PE 格式參考資料
PE Viewer 可查看檔案 PE 資料

2.
有種說法是是Visual Studio 專案建置平台目標 (Platform Target) 需設定
而不能使用 Any CPU
尤其使用到的外部 dll 是 x86 建置的
那就需要將平台目標設定為 x86 與 dll 一致

參考資料1
參考資料2


另外 .NET 有個工具 CorFlags.exe 可以檢查程式目標平台
dumpbin 也可以
使用方式就去 MSDN 查囉

參考資料

3. (還沒試過)
另外有人說 ffmpeg 需要設定 --enable-memalign-hack

類似問題
參考資料
arrow
arrow
    全站熱搜

    JohnDX 發表在 痞客邦 留言(0) 人氣()