TI论坛
直播中

王瑞

7年用户 229经验值
私信 关注

请问在DVSDK的编译环境下面如何在Codec里面调用*.lib文件?在编译阶段应该如何配置自己的编译脚本?

本帖最后由 一只耳朵怪 于 2018-5-31 16:28 编辑

最近要在DM6467上面集成一个第三方的*.lib文件,这个.lib是第三方在CCS上编译出来的,且没有遵照xDM的标准。
现在我要集成到DM6467上面来,所以自己新建了一个IMGENC的Codec,对这个*.lib做了一个简单封装,使其遵循xDM的标准。然后在ARM端调用xDM的接口,调用这个.lib的功能。
因此我在这个Codec的package.bld文件的最顶端添加了这一句话(假设这个.lib文件放在Codec目录下的./ThirdPart/ThirdPart.lib):
Pkg.attrs.lopts = "-l ./ThirdPart/ThirdPart.lib"
在编译整个.x64P文件(即Server)的最后出现了编译错误,内容如下(我要生成的.a64P文件叫'platerecognize.a64P',.x64P文件叫'PhocusALG.x64P' ):
undefined                        first referenced
symbol                              in file
---------                        ----------------
_TH_RecogImage                   /home/Phocus1855/ALG_20111010/packages/unic/sdo/codecs/platerecognize/lib/platerecognize.a64P
_TH_InitPlateIDSDK               /home/Phocus1855/ALG_20111010/packages/unic/sdo/codecs/platerecognize/lib/platerecognize.a64P
_TH_UninitPlateIDSDK             /home/Phocus1855/ALG_20111010/packages/unic/sdo/codecs/platerecognize/lib/platerecognize.a64P
>>   error: relocation overflow occurred at address 0x00000048 in section
            '.text' of input file 'platerecognize.o64P
            (/home/Phocus1855/ALG_20111010/packages/unic/sdo/codecs/platerecognize/lib/platerecognize.a64P)'.  The 29-bit PC-relative displacement 471141000 at this location is too large to fit into the 21-bit PC-Relative field; the destination address is too far away from the instruction. You may need to add a mask to the assembly instruction or use other target specific assembly features if you really only need the lowest 21 bits of this symbol. Please see the section on Relocation in the Assembly User's Guide.
>>   error: relocation overflow occurred at address 0x000000cc in section
            '.text' of input file 'platerecognize.o64P
            (/home/Phocus1855/ALG_20111010/packages/unic/sdo/codecs/platerecognize/lib/platerecognize.a64P)'.  The 29-bit PC-relative displacement 471140968 at this location is too large to fit into the 21-bit PC-Relative field; the destination address is too far away from the instruction. You may need to add a mask to the assembly instruction or use other target specific assembly features if you really only need the lowest 21 bits of this symbol. Please see the section on Relocation in the Assembly User's Guide.
>>   error: relocation overflow occurred at address 0x00000224 in section
            '.text' of input file 'platerecognize.o64P
            (/home/Phocus1855/ALG_20111010/packages/unic/sdo/codecs/platerecognize/lib/platerecognize.a64P)'.  The 29-bit PC-relative displacement 471140880 at this location is too large to fit into the 21-bit PC-Relative field; the destination address is too far away from the instruction. You may need to add a mask to the assembly instruction or use other target specific assembly features if you really only need the lowest 21 bits of this symbol. Please see the section on Relocation in the Assembly User's Guide.
>>   error: symbol referencing errors - 'PhocusALG.x64P' not built
gmake[1]: *** [PhocusALG.x64P] Error 1
gmake: *** [packages/unic/sdo/servers/encode,.executables] Error 2
make: *** [servers] Error 2
我现在想知道是在DVSDK的编译环境下面如果在Codec里面调用*.lib文件,在编译阶段应该如何配置自己的编译脚本?
希望TI的专家们能予以回复。

回帖(10)

袁媛

2018-5-31 03:01:04
如下
1. 这个.lib不遵循xdm标准,是否表示其对堆栈和任何形式的存储空间(片内,片外)的使用是随意的,如果是,则是无法集成到codec server的combo里也不能保证甚至是无法和其它Codec一起运行的
2. 这个.lib编译过程中使用的ToolChain要和DVSDK保持一致
举报

王瑞

2018-5-31 03:12:07
引用: rwd2016 发表于 2018-5-31 03:01
如下
1. 这个.lib不遵循xdm标准,是否表示其对堆栈和任何形式的存储空间(片内,片外)的使用是随意的,如果是,则是无法集成到codec server的combo里也不能保证甚至是无法和其它Codec一起运行的
2. 这个.lib编译过程中使用的ToolChain要和DVSDK保持一致 ...

这个个.lib肯定不遵循xdm标准,它对对堆栈和任何形式的存储空间(片内,片外)的使用是随意的。按照我提到的编译方法,在编译的最后阶段会出现上述错误。但是在那个Codec的目录下,还是会生成一个.a64P文件,即这个Codec是编译成功了,只是在最后编译.x64P的时候出错了。出错的原因应该是.x64P没有找到那几个接口函数所需要的.lib文件。
事实上,如果我在整个.x64P最顶端的那个config.bld文件中加上这样一句话
C64P.lnkOpts.suffix = " -l /xxx/xxx/xxx/xx/ThirdPart/ThirdPart.lib" ;   (xxx代表具体的路径)
整个.x64P的编译是通过的。这至少说明,.lib至少可以被.x64P引用。但是这样做的结果就是在最后发布我自己的Codec的同时(.a64P或者叫.l64P),还要暴露那个.lib。
事实上,我要封装的就是那个.lib,发布的时候我只想发布我自己编译生成的那个Codec的.a64P(或者叫.l64P),不想暴露那个.lib。所以我想知道的是如何在发布的时候不暴露这个.lib,我最想要的结果就是那个Codec自己引用.lib即可通过所有的编译。
至于你提到的“.lib编译过程中使用的ToolChain要和DVSDK保持一致”,那个.lib肯定不是在DVSDK里面编出来的,而且那个.lib也不是在6467上编译的,它是在DM642上编译出来的,且是用CCS编译出来的(由于是第三方的,所以具体的CCS版本也无从知晓)。
再次感谢您的回复
举报

袁媛

2018-5-31 03:28:33
引用: 邀杯同醉酒 发表于 2018-5-31 03:12
这个个.lib肯定不遵循xdm标准,它对对堆栈和任何形式的存储空间(片内,片外)的使用是随意的。按照我提到的编译方法,在编译的最后阶段会出现上述错误。但是在那个Codec的目录下,还是会生成一个.a64P文件,即这个Codec是编译成功了,只是在最后编译.x64P的时候出错了。出错的原因应该是.x64P没有找到那几个接口函数所需要 ...

1. 编肯定是能编出来的,编出来也不一定能够正确运行
2. 您最后发布的是.x64P的Combo就可以不暴露.a64P,如果单纯发布.a64P的Codec好像不太可能不暴露
举报

王瑞

2018-5-31 03:38:26
引用: rwd2016 发表于 2018-5-31 03:28
1. 编肯定是能编出来的,编出来也不一定能够正确运行
2. 您最后发布的是.x64P的Combo就可以不暴露.a64P,如果单纯发布.a64P的Codec好像不太可能不暴露

谢谢哦, VampireDaVinci
还有哪位TI的大爷能帮我回答一下这个问题么?不胜感激呀
举报

更多回帖

发帖
×
20
完善资料,
赚取积分