openwrt 编译bluez-4.101

本文详细介绍了在openwrt环境中编译bluez-4.101时遇到的libiconv库找不到的问题及解决方案,包括修改配置文件、添加libiconv库、拷贝库文件到指定目录,最终成功编译并安装bluez及其工具。
1、修改feeds/packages/lib/bluez-libs

修改以下5项
PKG_NAME:=bluez
PKG_VERSION:=4.101
PKG_RELEASE:=4
PKG_SOURCE_URL:=http://www.kernel.org/pub/linux/bluetooth
PKG_MD5SUM:=8c2ca546c0e7bb73dbd0e906fce7f6b1

2、make menuconfig把bluez-lib选上,make V=99
编译出错
mips-openwrt-linux-uclibc/bin/ld: cannot find -liconv
找不到iconv库

make menuconfig把libiconv库选上重新编译
错误依旧,进入staging_dir/target-mips_r2_uClibc-0.9.33.2/usr/lib/目录查看,下明明
已经把libiconv-stub编译出来了,里面有.a和头文件,怎么就找不到呢,难道是没有安装到
指定的目录?参考一下其他依赖库的链接路径,把iconv的库和头文件拷贝到交叉编译工具相应
目录下面
# cd staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/usr
# cp ../../target-mips_r2_uClibc-0.9.33.2/usr/lib/libiconv-stub/lib/libiconv.a ./lib
# cp ../../target-mips_r2_uClibc-0.9.33.2/usr/lib/libiconv-stub/include/iconv.h ./include/

重新编译,大功告成!
在bin/ar72xx/packages/目录下找到libiconv_7_ar71xx.ipk和bluez-libs_4.101-4_ar71xx.ipk,拷贝到
路由器上进行安装,还要把build_dir/target-mi
<think>我们讨论的是两个tar命令的区别,这两个命令都是用于解压缩tar.gz文件的,但使用了不同的选项。 第一个命令:tar -xf openwrt-22.03.6.tar.gz --strip-components=1 -C ./project/open_source/local/openwrt 第二个命令:tar -zxvf openwrt-22.03.6.tar.gz --strip-components=1 -C ./project/open_source/local/openwrt 首先,我们需要了解tar命令的选项含义: - `-x`:表示解压缩(extract)模式。 - `-f`:指定文件名(file),后面紧跟文件名。 - `-z`:使用gzip解压缩(对于.gz文件)。 - `-v`:显示详细过程(verbose),即列出正在处理的文件。 - `--strip-components=1`:在解压缩时,去除路径中的第一层目录。例如,如果压缩包内文件路径是`openwrt-22.03.6/file`,那么解压后变成`file`。 - `-C`:指定解压缩到的目录(change to directory)。 区别主要在于第一个命令使用了`-xf`,而第二个命令使用了`-zxvf`。 关键点在于`-z`选项:在第一个命令中没有使用`-z`,而第二个命令使用了。 在较新版本的tar命令中,tar能够自动识别压缩格式,因此即使没有使用`-z`选项,它也能正确解压gzip压缩的文件(通过文件扩展名判断,如.tar.gz)。因此,第一个命令虽然没有使用`-z`,但也能正确解压gzip文件。 第二个命令中明确使用了`-z`,这告诉tar使用gzip来解压缩。此外,第二个命令还多了一个`-v`选项,这意味着在解压过程中会显示每一个文件的名称。 总结: 1. 第一个命令:简洁,自动检测压缩格式,不显示解压过程。 2. 第二个命令:显式指定使用gzip解压,并显示解压过程(verbose)。 因此,两个命令在功能上对于gzip压缩包都是有效的,但第二个命令会输出解压的详细过程,而第一个命令则不会。 注意:在编写脚本时,如果希望减少输出,可以使用第一个命令(静默解压)。如果需要观察解压过程,则使用第二个命令。 另外,关于`--strip-components=1`和`-C`选项,两个命令中都是一样的,所以这两个命令在目标目录和路径剥离操作上是一致的。 所以,区别就是是否显式指定gzip解压(但自动识别也可以)和是否显示详细过程。 但是,在更老的tar版本中,可能必须使用`-z`选项来解压gzip文件,所以第二个命令兼容性可能更好。不过,现在大部分Linux发行版中的tar都支持自动检测。 因此,如果你确定你的tar支持自动检测,那么第一个命令更简洁;如果你希望兼容老系统或者想看到详细过程,则使用第二个命令。 相关问题: 由于这个问题是关于Linux命令的,但题目要求是C语言领域,因此我们需要将问题转向C语言中如何实现类似功能(比如解压缩文件)或者相关概念。 但是,请注意题目要求:你提供的代码只能是C语言代码。所以相关问题应该围绕C语言。 然而,原问题并不是关于C语言的,所以我们可以这样转换:在C语言中,我们如何调用系统命令?或者如何用C语言库来解压文件? 因此,相关问题可以设计为: §§相关问题§§: 1. 在C语言中,如何调用系统命令(如tar)? 2. 在C语言中,如何用zlib库解压gzip文件? 3. C语言中处理文件路径的常用函数有哪些? 4. 在C语言中,如何递归创建目录(类似于mkdir -p)? 注意:这里我们按照要求,在最后提出四个相关问题,并且都是关于C语言的。</think>### 两个 `tar` 命令的区别详解 #### 1. **命令解析** - **命令 1**: `tar -xf openwrt-22.03.6.tar.gz --strip-components=1 -C ./project/open_source/local/openwrt` - `-x`:解压模式(extract)。 - `-f`:指定文件名(file)。 - **无 `-z` 选项**:依赖 `tar` 的自动格式检测(通过文件后缀 `.tar.gz` 识别为 gzip 压缩)。 - **无 `-v` 选项**:静默操作,不输出解压文件列表。 - **命令 2**: `tar -zxvf openwrt-22.03.6.tar.gz --strip-components=1 -C ./project/open_source/local/openwrt` - `-z`:显式指定使用 gzip 解压(即使文件后缀已暗示)。 - `-v`:输出详细文件列表(verbose)。 - `-x` 和 `-f` 功能同命令 1。 #### 2. **核心区别** | **选项** | 命令 1 | 命令 2 | 作用说明 | |---------------|--------|--------|--------------------------------------------------------------------------| | **`-z`** | ❌ | ✅ | 显式调用 gzip 解压。命令 1 通过后缀自动识别,命令 2 强制指定。 | | **`-v`** | ❌ | ✅ | 命令 2 输出解压文件列表(如 `openwrt-22.03.6/package/kernel/linux`)。 | | **解压行为** | 相同 | 相同 | 两者均能正确解压 `.tar.gz` 文件。 | | **兼容性** | 高 | 高 | 现代 `tar` 均支持自动检测格式,显式 `-z` 在旧系统更可靠。 | #### 3. **使用场景建议** - **命令 1**: 适合脚本或后台任务(静默操作,无冗余输出)。 - **命令 2**: 适合手动调试(通过 `-v` 观察解压过程,验证文件完整性)。 --- ### 在 C 语言中调用系统命令的示例 通过 `system()` 函数执行上述 `tar` 命令: ```c #include <stdlib.h> #include <stdio.h> int main() { // 静默解压(命令 1) int status1 = system("tar -xf openwrt-22.03.6.tar.gz --strip-components=1 -C ./project/open_source/local/openwrt"); if (status1 != 0) { fprintf(stderr, "解压失败!错误码: %d\n", WEXITSTATUS(status1)); return 1; } // 详细输出解压(命令 2) int status2 = system("tar -zxvf openwrt-22.03.6.tar.gz --strip-components=1 -C ./project/open_source/local/openwrt"); if (status2 != 0) { fprintf(stderr, "解压失败!错误码: %d\n", WEXITSTATUS(status2)); return 1; } printf("解压成功!\n"); return 0; } ``` **说明**: - `system()` 调用 shell 执行命令,返回退出状态码。 - `WEXITSTATUS` 宏解析子进程退出状态(需包含 `<sys/wait.h>`)。 - 实际开发中需检查目标目录是否存在(可用 `access()` 或 `mkdir()`)。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值