Open quinnwencn opened 5 months ago
这样的方式遗留了一个问题,如果有其他组件依赖OSTree,就会遇到找不到头文件和库文件。根据OpenWRT的介绍,如果有其他的包依赖当前编译的包,那么需要定义Build/InstallDev,并将需要的库文件和头文件安装。
Build/InstallDev (optional) For things needed to compile packages against it (static libs, header files), but that are of no use on the target device.
因此,需要将安装方式改为:
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/.libs/ostree $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/ostree-prepare-root $(1)/usr/bin
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_BUILD_DIR)/.libs/lib*.a $(1)/usr/lib
$(CP) $(PKG_BUILD_DIR)/.libs/lib*.so* $(1)/usr/lib
$(INSTALL_DIR) $(1)/usr/include
$(CP) $(PKG_BUILD_DIR)/ipkg-install/usr/include/ostree-1/* $(1)/usr/include
endef
define Package/${PKG_NAME}/install
$(call Build/Install/Default,)
endef
Ref: github.com/login
配置内核:
make kernel_menuconfig
OpenWRT-22.03版本中并没有支持OSTree,因此需要手动支持OSTree,并集成到OpenWRT的menuconfig配置中,这样方便利用OpenWRT的其他库满足OSTree的依赖问题,否则的话,OSTree的多项依赖都需要依靠手动编译解决。 OpenWRT提供了两种不同的方式来继承依赖库,一种是用于集成开源软件的:https://openwrt.org/docs/guide-developer/packages#buildinstall_optional 另一种则是私有代码集成:https://openwrt.org/docs/guide-developer/helloworld/chapter3 OSTree属于开源仓库,因此我们采用第一种方式集成。 按照Makefile的结构,新增加的Makefile内容如下:
但是,OSTree在配置过程中发生了错误:
但是,e2fsprogs已经添加到依赖中了,只是仍然没有解决这个问题。通过查看staging_dir的输出,发现libe2p.so并没有存在,也就是说,e2fsprogs的编译并没有把编译产物输出到staging_dir目录。查看e2fsprogs的源码路径发现,编译产物输出在了lib目录下:
e2fsprogs是OpenWRT默认包含的库,因此不打算对他的编译过多参与,只通过上面的提示添加两个环境变量:
这样,e2p的检查就通过了,但是,却遇到了另外一个问题:
这个问题可以通过在Makefile中的DEPENDS增加依赖解决,最后成功编译!完整的Makefile如下:
这里的两个环境变量是为了解决e2fsprogs的问题,更好的方式应该是通过增加package的方式。