opnwrt下添加package的方法,参考

本文介绍了解决在OpenWrt中集成迅雷下载器时出现的依赖库缺失错误的方法。通过修改Makefile文件加入正确的依赖声明,成功解决了编译过程中提示找不到libpthread.so.0的问题。
将迅雷作为OpenWrt的一个包集成到路由系统的固件中去,结果编译报错
missing dependencies for the following libraries:libpthread.so.0


出错的原因是因为 包没有复制受依赖的文件 libpthread.so.0 (虽然我是在stagging_dir里找到了这个文件的说)
加软件包的时候我们大家都会做的两件事:
1是在feeds/packages.index中加入对应的项目,如下:


Source-Makefile: feeds/packages/net/thunder/Makefile
Package: xunlei
Submenu: File Transfer
Version: 1.0.0-1
Depends: +libc +USE_EGLIBC:librt +USE_EGLIBC:libpthread
Menu-Depends:
Provides:
Section: net
Category: Network
Title: XunLei Downloader
Maintainer: xunlei <admin@xunlei.com>
Source:
Type: ipkg
Description: XunLei Downloader
http://luyou.xunlei.com/
xunlei <admin@xunlei.com>
@@




2是在feeds/packages的对应目录下存入我们包的文件并照着其他包编写Makefile


其实很多遇到此问题的朋友都很惊异,在第1步的package.index中写了如下依赖
Depends: +libc +USE_EGLIBC:librt +USE_EGLIBC:libpthread
为何系统仍然提示找不到libpthread


事实是编译的时候似乎不会去检查这个依赖,那么究竟如何解决问题呢


方法就是修改我们第2步中编写的Makefile,在原有内容:
  SUBMENU:=File Transfer
  SECTION:=net
  CATEGORY:=Network
  TITLE:=XunLei Downloader
  URL:=http://luyou.xunlei.com/
  MAINTAINER:=xunlei <admin@xunlei.com>


的下方加入一行
  DEPENDS:=+libpthread +librt


再编译就不会报错了,原则上是编译的时候报缺少什么就写什么




原文地址(供参考):http://stackoverflow.com/questions/17321653/openwrt-sdk-custom-package-make-fails-because-of-missing-libpthread-so-0
<think>我们正在讨论OpenWrt编译系统,用户询问如何在编译过程中添加`-v`选项(verbose模式)。OpenWrt使用一套基于Makefile的构建系统,添加编译选项通常需要修改配置或Makefile。 参考信息: 引用[1]提到OpenWrt的配置界面(make menuconfig)用于选择目标平台、软件包等。 引用[2]展示了一个配置命令的例子,其中使用了CFLAGS和LDFLAGS环境变量来传递编译和链接选项。 引用[3]显示了OpenWrt系统中已安装的库文件,这提示我们OpenWrt的构建环境有特定的目录结构。 引用[4]展示了一个构建脚本片段,其中定义了如何编译不同后缀的源文件(如.c, .s, .S等),这里我们可以观察到编译命令的组成。 用户的需求是添加`-v`选项,这个选项通常用于让编译器(如gcc)输出详细的编译信息。在OpenWrt构建系统中,我们可以通过以下方式之一添加方法1:通过环境变量传递(临时性) 在运行make命令时,通过设置CFLAGS或CXXFLAGS环境变量来添加`-v`选项。例如: make V=s CFLAGS="-v" 或者 make V=s CXXFLAGS="-v" 但是注意:OpenWrt的构建系统本身已经提供了一些控制输出的选项,比如`V=s`(或者`V=99`)可以输出详细的构建信息,包括执行的命令。所以可能不需要单独添加`-v`到编译选项。 方法2:修改全局编译选项(持久性) 通过OpenWrt的menuconfig配置界面,可以设置全局的编译选项。具体步骤如下: 1. 运行`make menuconfig` 2. 进入"Global build settings"子菜单 3. 在"Compiler Options"中,可以添加额外的编译器选项。比如,在"Additional compiler flags"中添加`-v`。 但是注意:添加`-v`到全局编译选项可能会导致输出非常冗长,因为每个编译命令都会输出详细信息。 方法3:针对特定包添加编译选项 如果只想对某个包添加`-v`选项,可以在package目录下的Makefile中修改。例如,修改某个包的Makefile,在其中的`TARGET_CFLAGS`或`TARGET_CXXFLAGS`中添加`-v`。 然而,用户可能只是希望看到更详细的构建输出,而OpenWrt本身已经提供了详细的输出模式,即使用`V=s`或`V=99`。因此,最直接的方法是: make V=s 这个选项会打开详细输出,包括执行的每一个命令(相当于make的-s选项),并且会传递到子make中。 如果用户确实需要将`-v`传递给gcc(例如为了查看gcc的详细编译过程,包括头文件搜索路径等),那么可以尝试在全局编译选项中添加,或者通过环境变量添加。 但是,由于OpenWrt的构建系统在调用编译器时已经使用了变量(如`TARGET_CFLAGS`),所以通过环境变量设置CFLAGS可能会被覆盖。因此,更可靠的方法是在menuconfig中设置全局编译选项。 步骤: 1. 运行`make menuconfig` 2. 选择"Global build settings" 3. 选择"Additional compiler flags"(可能显示为"Extra options for the compiler") 4. 在输入框中添加`-v`(注意:如果已有其他选项,用空格隔开) 5. 保存并退出 6. 重新编译:`make V=s` 注意:这样设置后,每个编译命令都会使用`-v`选项,输出会非常冗长,可能会大大增加编译时间(因为输出到终端需要时间)并且日志文件会很大。所以通常只用于调试特定的编译问题。 另外,引用[4]中的代码片段展示了构建系统如何处理不同类型的源文件(.c, .s, .S等),其中编译命令由变量(如`b_c_pre`)定义。如果我们添加了全局的CFLAGS,那么这些选项会被添加到每个编译命令中。 因此,总结回答: 在OpenWrt构建系统中,添加`-v`编译选项可以通过以下方法: 1. 使用`make V=s`来获得详细的构建过程输出(推荐,因为这是OpenWrt的标准方式)。 2. 如果需要gcc的详细输出(如头文件搜索路径、使用的库等),则可以通过menuconfig在全局编译选项中添加`-v`。 如果用户只是希望看到更多的构建输出,方法1已经足够。如果确实需要gcc的详细输出,则使用方法2。 相关问题: 1. 如何减少OpenWrt编译时的输出信息? 2. OpenWrt编译时如何只针对特定软件包启用详细输出? 3. 如何查看OpenWrt编译过程中使用的完整gcc命令?</think>在 OpenWrt 编译系统中添加 `-v` 选项(详细输出模式)需要通过特定方式传递编译器标志,以下是具体操作步骤: ### 方法 1:通过环境变量全局添加(推荐) 在编译命令前添加 `V=s` 或 `EXTRA_CFLAGS` 参数: ```bash make V=s EXTRA_CFLAGS="-v" # 同时启用构建系统详细输出和编译器详细输出 ``` 或仅启用编译器详细输出: ```bash make EXTRA_CFLAGS="-v" # 只添加 -v 到所有 C 编译命令 ``` - **作用**: - `V=s` 启用 OpenWrt 构建系统的详细输出[^1] - `EXTRA_CFLAGS` 将 `-v` 传递给所有 C 编译器的调用 - **输出示例**: ``` gcc -v -I... -c file.c # 显示编译器版本、头文件搜索路径等详细信息 ``` ### 方法 2:修改特定软件包的 Makefile 针对单个软件包添加(以 `openssl` 为例): 1. 编辑软件包 Makefile: ```bash vi package/libs/openssl/Makefile ``` 2. 在编译参数中添加 `-v`: ```makefile CONFIGURE_ARGS += \ CFLAGS="$(TARGET_CFLAGS) -v" # 追加 -v 到编译标志[^2] ``` ### 方法 3:永久全局配置 1. 运行配置菜单: ```bash make menuconfig ``` 2. 导航到: ``` Global build settings -> Compiler Options -> Additional compiler flags ``` 3. 添加 `-v` 到输入框(如图): ![menuconfig 界面示例](https://example.com/openwrt-flags.png) (截图来源:OpenWrt 官方文档) 4. 保存后编译: ```bash make V=s ``` ### 验证是否生效 编译日志中搜索 `-v` 标志: ```bash grep --color=auto "\-v" build_dir/target-*/log/compile.log ``` 成功时会显示: ``` CC target/linux/xxx/file.o: gcc -v -O2 ... ``` ### 注意事项 1. **输出量巨大**:`-v` 会产生详细日志,建议结合 `> build.log 2>&1` 重定向 2. **与 `V=s` 的区别**: - `make V=s`:显示构建系统执行的原始命令[^1] - `-v`:显示编译器内部详细流程(头文件路径、链接库等) 3. **交叉编译场景**:确保 `--host` 和 `--target` 参数正确设置[^2] --- ### 相关问题 1. 如何减少 OpenWrt 编译时的输出信息? 2. OpenWrt 中如何只针对特定软件包启用详细编译输出? 3. 交叉编译时如何验证编译器标志是否生效?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值