织梦CMS - 轻松建站从此开始!

罗索

x264 for Visual Studio 2008

jackyhwei 发布于 2011-07-06 22:02 点击:次 
默认情况下,用MinGW/gcc 编译x264的动态库的时候只能生成libx264.dll和libx264.dll.a,这个.a文件不是标准的Win32的DLL导出函数所用到的lib格式,虽然可以修改文件名为libx264.lib,然后在VS2008中用,但是由于此做法属于Hack性质的,不推荐
TAG:

默认情况下,用MinGW/gcc 编译x264的动态库的时候只能生成libx264.dll和libx264.dll.a,这个.a文件不是标准的Win32的DLL导出函数所用到的lib格式,虽然可以修改文件名为libx264.lib,然后在VS2008中用:
#pragma comment(lib, "libx264.lib")
的方式来使用,但是由于此做法属于Hack性质的,不推荐,有可能遇到一些很诡异的错误。
比如我这边就会遇到很变态的错误:上面代码在DEBUG下可以使用,在RELEASE下就无法使用。

解决方法之一:

用 LoadLibrary() + GetProcAddress()来显式的调用x264相应的APIs
这种方式就是稍微麻烦了一点,好处是效率更高,因为比用lib的方式的隐式调用,少了一次函数跳转的开销。

解决方法之二

对最新的x264代码加入如下补丁:

----------------------------------------------------
diff --git a/Makefile b/Makefile
index ea6edd4..97e139d 100644
--- a/Makefile
+++ b/Makefile
@@ -109,6 +109,7 @@ libx264.a: .depend $(OBJS) $(OBJASM)
 
 $(SONAME): .depend $(OBJS) $(OBJASM)
     $(CC) -shared -o $@ $(OBJS) $(OBJASM) $(SOFLAGS) $(LDFLAGS)
+    lib /machine:i386 /def:libx264.def
 
 x264$(EXE): $(OBJCLI) libx264.a
     $(CC) -o $@ $+ $(LDFLAGS)
diff --git a/configure b/configure
index 0cc246d..13c5af1 100755
--- a/configure
+++ b/configure
@@ -500,9 +500,9 @@ EOF
 if [ "$shared" = "yes" ]; then
     API=$(grep '#define X264_BUILD' < x264.h | cut -f 3 -d ' ')
     if [ "$SYS" = "MINGW" ]; then
-        echo "SONAME=libx264-$API.dll" >> config.mak
+        echo "SONAME=libx264.dll" >> config.mak
         echo 'IMPLIBNAME=libx264.dll.a' >> config.mak
-        echo 'SOFLAGS=-Wl,--out-implib,$(IMPLIBNAME) -Wl,--enable-auto-image-base' >> config.mak
+        echo 'SOFLAGS=-Wl,--output-def,libx264.def,--out-implib,$(IMPLIBNAME) -Wl,--enable-auto-image-base' >> config.mak
     elif [ "$SYS" = "MACOSX" ]; then
         echo "SOSUFFIX=dylib" >> config.mak
         echo "SONAME=libx264.$API.dylib" >> config.mak


延伸阅读:MSVC and MinGW DLLs http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs

(psusong)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201107/14671.html]
本文出处:CSDN博客 作者:psusong
顶一下
(1)
50%
踩一下
(1)
50%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容