利用objcopy把资源文件编译进动态库或可执行文件

本文介绍了如何利用objcopy和nm命令将资源文件,如caffe的prototxt和模型文件,编译进动态库或可执行文件。这样,程序在运行时不再需要依赖外部资源文件,简化了部署过程并避免了版本匹配问题。通过将资源文件转换为.o文件,然后解析符号表获取数据地址,可以在内存中直接使用这些资源。文章提供了详细的操作步骤和代码示例。
摘要由CSDN通过智能技术生成

      工作中收到一个需求,需要把caffe的prototxt文件和模型文件编译进动态库,以后链接了这个动态库的工程,不需要依赖其他资源文件,只需要执行相关函数就可以直接进行人脸跟踪。以前提供的库是库,模型是模型,一旦不同版本的模型和库文件配对出了错误,整个跟踪结果就会出现一些乱七八糟的错误,现在打包成一个即可彻底避免这种情况。

       首先需要明确,资源文件只不过是一堆存储在磁盘上的二进制串,按照一定规则读入内存后,便会起到我们期望的作用。那如果事先把资源文件作为全局变量直接编入可执行文件或者动态库中,在程序执行过程中,再按照一定规则解读这段内存,当然也可以达到同样的效果。

        这便需要用到objcopy和nm命令来实现。objcopy和nm都是Linux系统提供的命令,简单来说,objcopy可以把资源文件转换成.o文件,这样才能编译到可执行文件或者库文件中,而nm命令则用来解读.o文件的符号表,定位具体的数据地址。具体操作如下:

         模型文件为A.caffemodel。首先完成准备工作:先利用caffe提供的接口ReadNetParamsFromTextFileOrDie将A.caffemodel读取到内存中的,以caffe::NetParameter的结构存在,再通过WriteProtoToBinaryFile函数将其写入磁盘,成为B.binarymodel文件,得到了B.binarymodel文件,则准备工作完成,只要反序列化B文件,就能在内存中重建caffe::NetParameter结构。

          接下来解决如何把B.binarymodel文件编入可执行文件的问题。首先用如下命令得到.o文件,-I为输入文件格式,-O为为输出文件格式&#x

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值