ffmpeg编译的静态链接库问题
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,安装了ffmpeg在wince编译生成dll和.a文件,但是发现这个.a文件并不是像win32下面的lib文件,不能够直接调用,如果直接调用会产生error LNK2001: unresolved e
千家信息网最后更新 2025年01月22日ffmpeg编译的静态链接库问题安装了ffmpeg在wince编译生成dll和.a文件,但是发现这个.a文件并不是像win32下面的lib文件,不能够直接调用,如果直接调用会产生error LNK2001: unresolved external symbol __alloca和 error LNK2001: unresolved external symbol ___divdi3以及error LNK2001: unresolved external symbol ___umoddi3,就着三个外部库文件调用失败,个人认为只是不同的lib有些东西.a文件里面还是没有的,要能够让你的vc能够使用还是把它生成lib文件的好,下面结合自己的经验说说怎么生成lib文件,记载csdn上面免得又忘了。 在mingw中已经有这样的工具了叫做dlltool,但是这个没有见过,后面在讲,下面我们将一种win32的方法,如果我们已经有一个dll(我们可以编译ffmpeg得到),但是我们没有lib文件,怎么办?在vc下面有这样的一个工具,叫做DUMPBIN,这个工具可以把dll导出def文件来描述dll的接口, DUMPBIN VideoDeCoder.dll /EXPORTS /OUT:VideoDeCoder.def 我们可以在vc的bin下面找到这个文件,好,现在我们可以运行这个dumpbin然后我们对我们的dll进行使用,我们的dll有三个avcodec.dll、avformat.dll和avutil.dll,这样我们可以生成三个def文件,下一步就是如何将这三个dll变成lib了。这个def文件并不是一个专门lib的def文件而是有一个dll得来,我们要把它变成lib还要一些修改。 原始文件Dump of file C:\\Program Files\\FFmpeg\\avutil.dllFile
Type: DLL Section contains the following exports for avutil.dll
00000000 characteristics
49659AAD time date stamp Thu Jan 08 14:18:21 2009
0.00 version
1 ordinal base
34 number of functions
34 number of names
ordinal hint RVA
name
1 0 00001C70 av_add_i
2 1 00002850 av_add_q
3 2 00001F10 av_cmp_i
4 3 00003130 av_crc
5 4 00005080 av_crc04C11DB7
6 5 00005090 av_crc07
7 6 00005060 av_crc8005
8 7 00005070 av_crcEDB88320
9 8 00003000 av_crc_init
10 9 00002940 av_d2q
11 A 00002AB0 av_dbl2ext
12 B 00002E30 av_dbl2int
13 C 00002420 av_div_i
14 D 00002800 av_div_q
15 E 00002D40 av_ext2dbl
16 F 00002F30 av_flt2int
17 10 000024D0 av_i2int
18 11 00002C00 av_int2dbl
19 12 00002CC0 av_int2flt
20 13 00002480 av_int2i
21 14 00001D30 av_log2_i
22 15 00001FF0 av_mod_i
23 16 00001D80 av_mul_i
24 17 000027B0 av_mul_q
25 18 00002510 av_reduce
26 19 000016A0 av_rescale
27 1A 00001980 av_rescale_q
28 1B 000013B0 av_rescale_rnd
29 1C 00001F60 av_shr_i
30 1D 00001CD0 av_sub_i
31 1E 000028C0 av_sub_q
32 1F 00001350 ff_gcd
33 20 00001250 ff_log2_tab
34 21 000011D0 ff_sqrt_tab
Summary
1000 .bss
1000 .data
1000 .edata
1000 .idata
1000 .reloc
3000 .text 变换后的文件:
LIBRARY "avutil"
DESCRIPTION "avutil"
EXPORTS
av_add_i @1
av_add_q @2
av_cmp_i @3
av_crc @4
av_crc04C11DB7 @5
av_crc07 @6
av_crc8005 @7
av_crcEDB88320 @8
av_crc_init @9
av_d2q @10
av_dbl2ext @11
av_dbl2int @12
av_div_i @13
av_div_q @14
av_ext2dbl @15
av_flt2int @16
av_i2int @17
av_int2dbl @18
av_int2flt @19
av_int2i @20
av_log2_i @21
av_mod_i @22
av_mul_i @23
av_mul_q @24
av_reduce @25
av_rescale @26
av_rescale_q @27
av_rescale_rnd @28
av_shr_i @29
av_sub_i @30
av_sub_q @31
1ff_gcd @32
ff_log2_tab @33
ff_sqrt_tab @34 将所有的函数放至行首,去掉 "hint" 和 "RVA" 数据,留下函数的序号 "ordinal" ,在序号前加上 "@" 符号 形成"_导出函数名@参数字节和 @序号" 此种格式(__stdcall 方式调用导出的函数符号是 "函数名称@参数字节和").最后形成.DEF文件如下:
使用VC++的LIB工具,带/DEF:(.def文件名) /MACHINE:IX86(80X86机器),就输出符合VC++格式的的LIB文件了. EXAMPLE: LIB /DEF:avutil.def /MACHINE:IX86时带上LIB文件链接;注意的是当有些动态库DUMPBIN的只有函数名,无"@nn"的参数格式,如C++Builder写的DLL,输出就只有函数名符号,链接时就会报错: error LNK2002:unresolved external symbol "functionname@nn"提示程序中引入的函数符号无法识别,这时只要将DEF文件中相应的函数名称改为functionname@nn方式,重新建立 LIB,重新链接即可. mspdb80.dll无法找到的情况 在cmd中键入cl执行编译时会出现mspdb80.dll无法找到的情况,是因为VC\Bin\下没有"msobj80.dll,mspdb80.dll,mspdbcore.dll,mspdbsrv.exe"这四个文件,解决的方法:
1>直接从Common7\IDE\下复制这四个文件到VC\Bin\下即可解决
2>添加系统变量(Path),这样:我的电脑->属性->高级->环境变量->系统变量,在path中添加C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;,注意结尾最后用";"隔开!
这样在用cl编译就不会出现mspdb80.dll文件找不到的错误了。
Type: DLL Section contains the following exports for avutil.dll
00000000 characteristics
49659AAD time date stamp Thu Jan 08 14:18:21 2009
0.00 version
1 ordinal base
34 number of functions
34 number of names
ordinal hint RVA
name
1 0 00001C70 av_add_i
2 1 00002850 av_add_q
3 2 00001F10 av_cmp_i
4 3 00003130 av_crc
5 4 00005080 av_crc04C11DB7
6 5 00005090 av_crc07
7 6 00005060 av_crc8005
8 7 00005070 av_crcEDB88320
9 8 00003000 av_crc_init
10 9 00002940 av_d2q
11 A 00002AB0 av_dbl2ext
12 B 00002E30 av_dbl2int
13 C 00002420 av_div_i
14 D 00002800 av_div_q
15 E 00002D40 av_ext2dbl
16 F 00002F30 av_flt2int
17 10 000024D0 av_i2int
18 11 00002C00 av_int2dbl
19 12 00002CC0 av_int2flt
20 13 00002480 av_int2i
21 14 00001D30 av_log2_i
22 15 00001FF0 av_mod_i
23 16 00001D80 av_mul_i
24 17 000027B0 av_mul_q
25 18 00002510 av_reduce
26 19 000016A0 av_rescale
27 1A 00001980 av_rescale_q
28 1B 000013B0 av_rescale_rnd
29 1C 00001F60 av_shr_i
30 1D 00001CD0 av_sub_i
31 1E 000028C0 av_sub_q
32 1F 00001350 ff_gcd
33 20 00001250 ff_log2_tab
34 21 000011D0 ff_sqrt_tab
Summary
1000 .bss
1000 .data
1000 .edata
1000 .idata
1000 .reloc
3000 .text 变换后的文件:
LIBRARY "avutil"
DESCRIPTION "avutil"
EXPORTS
av_add_i @1
av_add_q @2
av_cmp_i @3
av_crc @4
av_crc04C11DB7 @5
av_crc07 @6
av_crc8005 @7
av_crcEDB88320 @8
av_crc_init @9
av_d2q @10
av_dbl2ext @11
av_dbl2int @12
av_div_i @13
av_div_q @14
av_ext2dbl @15
av_flt2int @16
av_i2int @17
av_int2dbl @18
av_int2flt @19
av_int2i @20
av_log2_i @21
av_mod_i @22
av_mul_i @23
av_mul_q @24
av_reduce @25
av_rescale @26
av_rescale_q @27
av_rescale_rnd @28
av_shr_i @29
av_sub_i @30
av_sub_q @31
1ff_gcd @32
ff_log2_tab @33
ff_sqrt_tab @34 将所有的函数放至行首,去掉 "hint" 和 "RVA" 数据,留下函数的序号 "ordinal" ,在序号前加上 "@" 符号 形成"_导出函数名@参数字节和 @序号" 此种格式(__stdcall 方式调用导出的函数符号是 "函数名称@参数字节和").最后形成.DEF文件如下:
使用VC++的LIB工具,带/DEF:(.def文件名) /MACHINE:IX86(80X86机器),就输出符合VC++格式的的LIB文件了. EXAMPLE: LIB /DEF:avutil.def /MACHINE:IX86时带上LIB文件链接;注意的是当有些动态库DUMPBIN的只有函数名,无"@nn"的参数格式,如C++Builder写的DLL,输出就只有函数名符号,链接时就会报错: error LNK2002:unresolved external symbol "functionname@nn"提示程序中引入的函数符号无法识别,这时只要将DEF文件中相应的函数名称改为functionname@nn方式,重新建立 LIB,重新链接即可. mspdb80.dll无法找到的情况 在cmd中键入cl执行编译时会出现mspdb80.dll无法找到的情况,是因为VC\Bin\下没有"msobj80.dll,mspdb80.dll,mspdbcore.dll,mspdbsrv.exe"这四个文件,解决的方法:
1>直接从Common7\IDE\下复制这四个文件到VC\Bin\下即可解决
2>添加系统变量(Path),这样:我的电脑->属性->高级->环境变量->系统变量,在path中添加C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;,注意结尾最后用";"隔开!
这样在用cl编译就不会出现mspdb80.dll文件找不到的错误了。
文件
函数
编译
三个
工具
符号
生成
链接
参数
变量
序号
格式
只有
名称
字节
情况
方式
方法
系统
还是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
湖北电信软件开发
企业服务器硬盘共享
高科技网络技术设计
数据库必学知识点总结
软件开发和设计工程师
虹口涉密信息系统集成软件开发
java登陆程序连接数据库
medbanks数据库
网络安全服务布局
手机上可以远程连接云服务器吗
初中生想学网络技术
开封市教育局网络安全宣传
专门用于数据采集的数据库
适配rtx3090显卡的服务器
科室会图片数据库
佛山软件开发报价
bs网络安全
影梭 服务器
鸿峥网络技术有限公司
线上招聘软件开发技术
数据库序列的英文
服务器冗余电源负载
web服务器操作啥意思
软件开发模式之敏捷开发
计算机网络技术及应用电子版
如何选用服务器
关系数据库xy曲线
大连国信网络技术有限公司
net core 数据库迁移
广东软件开发机构