ffmpeg编译的静态链接库问题
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,安装了ffmpeg在wince编译生成dll和.a文件,但是发现这个.a文件并不是像win32下面的lib文件,不能够直接调用,如果直接调用会产生error LNK2001: unresolved e
千家信息网最后更新 2025年02月23日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安全错误
数据库的锁怎样保障安全
黑后台进数据库
网络安全系列丛书
web访问数据库
ps4 服务器会关闭吗
quartz调度数据库任务
mc服务器1.7.2
上海时元互联网科技
分布式数据库的分布式查询有哪些
数据库与商业智能mooc答案
软件开发公司的重要作用
滨州科恒网络技术有限公司
武汉市嘉仕力网络技术有限公司
崩坏3其他服务器账号注销
游戏服务器一天的维护费用
双S网络安全考试
国家网络安全学院有什么优势
虚拟服务器 端口触发
最好的linux服务器
access数据库求偶数
安华金和数据库安全
oracle数据库查重复
软件开发专业资格证书
军用数据库安全要求
crt上怎么操作数据库
合肥鲲鹏系列服务器直销厂家
描述性医院网络安全句子
本地电脑怎么设置为网页服务器
全球大企业接连被袭击网络安全
国家网络安全学院有什么优势
普法课堂一图读懂网络安全