解決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 宏來強制性地將那幾個庫加進去。好比: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++呢?這個有待研究一下。

相關文章
相關標籤/搜索