一)仅运行时依赖
如果你的包依赖不需要在编译包期间做什么,比如只是个Luci界面扩展,或者只是一些脚本,那么加到Makefile里面就可以了。
define Package/mypackage SECTION:=utils CATEGORY:=Utilities TITLE:=My first package DEPENDS:=+another_package endef
二)编译时依赖
但也有很多时候,包会提供动态链接库,依赖它的包会使用这个动态链接库,这时就需要改更多地方来实现编译时的依赖。
比如我让mypackage依赖libuci这个包,并在程序中使用libuci.so。首先,修改Makefile:
define Package/mypackage SECTION:=utils CATEGORY:=Utilities TITLE:=My first package DEPENDS:=+libuci endef # LDLIBS参数会被传入src/Makefile中来使用 MAKE_FLAGS += LDLIBS+="-luci"
然后更新src/main.c,这里没有做实际的事情,只是调用了libuci.so中的两个方法。
#include <stdio.h> #include <uci.h> int main(int argc, char** argv) { struct uci_context* context = uci_alloc_context(); puts("Hello, OpenWrt!"); uci_free_context(context); return 0; }
在openwrt目录下更新依赖并编译,下载依赖只需要在第一次加依赖的时候做:
./scripts/feeds update base ./scripts/feeds install libuci make package/mypackage/compile
最终编译成功,并在路由器上也可以成功安装运行,让自己的包可以被编译时依赖。
查看libuci的Makefile文件,可以看到以下内容:
define Build/InstallDev $(INSTALL_DIR) $(1)/usr/include $(CP) $(PKG_BUILD_DIR)/uci{,_config,_blob,map}.h $(1)/usr/include $(INSTALL_DIR) $(1)/usr/lib $(CP) $(PKG_BUILD_DIR)/libuci.so* $(1)/usr/lib $(CP) $(PKG_BUILD_DIR)/libucimap.a $(1)/usr/lib endef
Build/InstallDev这段定义了在编译完成时做的事情,这里提供了头文件uci.h和动态链接库libuci.so给后来编译的包,也是就依赖它的包,来使用。
在IDE里编辑
如果在IDE里面编辑main.c,会出现找不到uci.h的问题。在使用命令成功编译后,这个头文件的位置在openwrt目录下的staging_dir/<target>/usr/include。将这个目录加到IDE的C/C++头文件引用路径就可以解决这个问题。
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。