轉自: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++呢?這個有待研究一下。