如何在项目中使用ffmpeg 静态库

最近在做一个项目,起初这个项目由一个exe和几个动态库组成,现在想将部分动态库转换为静态库,于是在VS2010中鼠标停靠到项目名上右键->属性->配置属性->常规->项目默认值->配置类型,将动态库(.dll)改为静态库(.lib),重新编译该项目,编译成功,但是再重生成exe时却出现很多链接错误;修改一通之后还未能解决问题;于是静下心来写了一个测试工程;

工程里有A,B两个项目,A为控制台应用程序,B为win32动态库,B中写了一个简单的函数__declspec(dllexport)  int myAdd(int a,intb)

{

Return a+b;

}

在A中调用并输出结果没问题,

然后将B的项目类型改为静态库,重新生成A,出现连接错误;仔细检查发现myAdd 声明时前面有一个__declspec(dllexport)这是动态库导出函数用的,去掉__declspec(dllexport)重新生成B,A成功,运行没问题,小兴奋了一下。

然后将原项目中的所有__declspec(dllexport)删除,重新生成,发现还是有连接错误,百思不得其解,百度谷歌都没找到答案,于是静下心在仔细观察输出错误信息,发现这些连接错误都是静态库调用系统或d3d的函数找不到并没有说静态库的导出函数找不到,于是恍然大悟,静态库中调用其他动态库时,是按动态库的规则调用的,将静态库所引用的库文件放在需要调用这些静态库的DLLEXE中的链接->输入中再重新生成,成功,在兴奋,运行没问题,再兴奋;

说的比较模糊总结一下将现有的dll转换为静态库,有两点需要注意

1:将动态库导出函数的声明前的__declspec(dllexport)去掉,这样链接时就不会找不到静态库的导出函数;

2:将动态库所引用的库文件,在调用该库的exedll中引用(尽管这些项目并没有直接引用这些库文件)这样就可以避免在连接时找不到静态库引用动态库中的函数。

Vs2010 中FFMPEG静态库的使用

首先将ffmpeg的静态库在mingw环境下编译成功,注意产生的静态库名字是lib***.a的形式,而不是.lib文件。

在项目中连接->输入如下库

libgcc.a

libmingwex.lib

libavcodec.a

libavformat.a

libavutil.a

libswscale.a

libz.a

libbz2.a

libpthreadGC2.a

其中libmingwex.lib

用以下方法得到;

1、首先运行cmd,在cmd中执行vs安装目录下vc /bin中的vcvars32.bat(我的电脑的路径是C:\ProgramFiles (x86)\Microsoft Visual Studio 10.0\VC\bin),配置vs环境,注意配置的环境只在当前cmd窗口中有效。

2、运行

cd  C:\msys\1.0\mingw\lib

进入mingw的目录,具体路径根据自己安装的环境而定只要进入libmingwex.lib

所在目录就可以

3、运行

lib –remove:mbrtowc.o libmingwex.a

lib –remove:mcrtomb.o libmingwex.lib

这时生成的libmingwex.lib即可使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值