转自: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 宏来强制性地将那几个库加进去。好比:c++
define Package/cpp-demo/extra_provides echo "libstdc++.so.6" echo "libc.so.6" echo "libm.so.6" endef
通过试验,正确的写法以下:ide
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个库文件。spa
比较稳妥的方法是采用方案二,以下:.net
解决方案二:在 Makefile 中的 Package/cpp-demo/install 宏中准备所需的库文件
还有另外一个方法,注意L176,$(call Package/$(1)/install, $$(IDIR_$(1))),这个就是引用了咱们在Makefile里写的 Package/cpp-demo/install 宏么?
咱们能够在这个宏里,将它须要的几个库文件复制到 $(1) 对应的目录下。code
以下修改:blog
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 命令查找一下。ip
好了,这样再make V=s,就能正常打包了。get
解决方案三:在 Makefile 文件的 Package/cpp-demo 宏中加 DEPENDS 描述
这个方法不是我想到的,是[GunNRose]给我建议。修改 Makefile:class
define Package/cpp-demo ...<略> DEPENDS:+=libstdcpp endef
经博主亲自尝试,是OK的。
不过,为何是叫libstdcpp而不是libstdc++呢?这个有待研究一下。