解决openwrt应用编译依赖报错

转自:https://my.oschina.net/hevakelcj/blog/411944

解决方案一:在 Makefile 中添加 Package/cpp-demo/extra_provides 宏

注意:L184,是 $(Package/$(1)/extra_provides)。也就是说,我们可以在 package/cpp-demo/Makefile 文件中定义 Package/cpp-demo/extra_provides 宏来强制性地将那几个库加进去。比如:

define Package/cpp-demo/extra_provides
    echo "libstdc++.so.6"
    echo "libc.so.6"
    echo "libm.so.6"
endef

经过试验,正确的写法如下:

define Package/cpp-demo/extra_provides
    echo 'libstdc++.so.6'; \
    echo 'libm.so.6'; \
    echo 'libc.so.6';
endef

这样写果然凑效,再 make V=s,能够打包成功。

但是,有点我们必须明确的是:在打包中生成的ipk文件里,是没有libstdc++, libc, libm这3个库的。如果所安装的OpenWrt系统里也没有这3个库,那么我们安装的应用程序是不能正常使用的。
相当于是在骗ipk工具,我们已具备了上面这3个库文件。

 

比较稳妥的方法是采用方案二,如下:

 

解决方案二:在 Makefile 中的 Package/cpp-demo/install 宏中准备所需的库文件

还有另一个方法,注意L176,$(call Package/$(1)/install, $$(IDIR_$(1))),这个就是引用了我们在Makefile里写的 Package/cpp-demo/install 宏么?
我们可以在这个宏里,将它需要的几个库文件复制到 $(1) 对应的目录下。

如下修改:

define Package/cpp-demo/install
    $(INSTALL_DIR) $(1)/bin
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/cpp-demo $(1)/bin

    $(INSTALL_DIR) $(1)/usr/lib
    $(INSTALL_DATA) $(TOOLCHAIN_DIR)/lib/libstdc++.so.6 $(1)/usr/lib
    $(INSTALL_DATA) $(TOOLCHAIN_DIR)/lib/libm.so $(1)/usr/lib/libm.so.6
    $(INSTALL_DATA) $(TOOLCHAIN_DIR)/lib/libc.so $(1)/usr/lib/libc.so.6
endef

其中,INSTALL_DATA 与 TOOLCHAIN_DIR 这两个变量在 rules.mk 文件中定义。
之所以选用 TOOLCHAIN_DIR,是因为libstdc++.so.6这个文件就在这个变量所对应的路径下。不信,你可以用 find 命令查找一下。

好了,这样再make V=s,就能正常打包了。

 

解决方案三:在 Makefile 文件的 Package/cpp-demo 宏中加 DEPENDS 描述

这个方法不是我想到的,是[GunNRose]给我建议。修改 Makefile:

define Package/cpp-demo
    ...<略>
    DEPENDS:+=libstdcpp
endef

经博主亲自尝试,是OK的。

不过,为什么是叫libstdcpp而不是libstdc++呢?这个有待研究一下。

 

原文链接: https://www.cnblogs.com/cxt-janson/p/10977976.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    解决openwrt应用编译依赖报错

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/296259

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午5:42
下一篇 2023年2月15日 下午5:42

相关推荐