OpenWRT18 编译 cmake-3.13

本文提供了一套详细的步骤来解决在编译过程中遇到的/usr/bin/ld:cannot find -ldl 和 /usr/bin/ld:cannot find -lrt 错误。通过安装必要的软件包,下载并配置cmake,以及修改特定的cmake文件,可以有效地解决这些常见的链接问题。

主要问题是

 /usr/bin/ld: cannot find -ldl

和 /usr/bin/ld: cannot find -lrt

 

1. opkg install gcc make  

2. wget   cmake-3.13.tar.gz &&  tar -xzf cmake-3.13.tar.gz

3. cd cmake-3.13

4. find . -name "*.cmake.in" -exec sed -i  "s/-lrt//g" '{}' \;

5.find . -name "*.cmake.in" -exec sed -i  "s/-ldl//g" '{}' \;

6. sed -i  "s/-ldl//g" bootstrap &&  sed -i  "s/-lrt//g" bootstrap

7.  ./bootstrap --prefix=/usr

8. make 

9. find . -name "link.txt" -exec sed -i  "s/-ldl//g" '{}' \; 

10. find . -name "link.txt" -exec sed -i  "s/-lrt//g" '{}' \;

11.find . -name Makefile2 -exec sed -i  "s/-ldl//g" '{}' \;

12.find -name Makefile2 -exec sed -i  "s/-lrt//g" '{}' \;

13.make

14.make install 

<think> 嗯,用户这次的问题是询问在OpenWrt系统中编译SystemTap-runtime的方法。从历史对话看,用户之前关注过内核调试和OpenWrt编译相关的内容,应该是个嵌入式开发者或系统工程师。 用户提供的四个引用材料中,[1]和[3]特别有价值。[1]详细说明了OpenWrt编译环境的搭建步骤,而[3]展示了OpenWrt交叉编译的实际命令格式。不过要注意,用户真正需要的是systemtap-runtime的编译方法,不是基础编译环境配置。 用户可能正在调试OpenWrt设备的内核问题,所以需要动态追踪工具。考虑到OpenWrt的特殊性(资源受限的嵌入式环境),需要特别注意几点: 1. 资源占用问题:SystemTap-runtime在嵌入式设备上可能占用较多内存 2. 内核匹配:必须严格匹配内核版本和调试符号 3. 交叉编译:和[3]提到的mysqlclient编译类似,需要用到OpenWrt工具链 之前的回答已经给出了完整步骤,但用户可能需要更明确的交叉编译指引。特别是第三步的Menuconfig配置位置,在"Utilities"分类下可能不够显眼,需要具体说明导航路径。 另外注意到用户引用[4]提到nginx-lua-module编译,说明用户有添加第三方模块的经验。这点可以利用,在回答中类比说明systemtap-runtime也是作为可选包添加的。 安全方面要提醒用户:生产设备谨慎使用SystemTap,避免触发内核崩溃。这点在资源受限的嵌入式系统尤其重要。 </think> 在OpenWrt系统中编译SystemTap-runtime需通过OpenWrt SDK交叉编译,以下是具体步骤: --- ### 1. **准备编译环境** ```bash # 安装依赖(Ubuntu示例) sudo apt-get install build-essential ccache git libncurses5-dev subversion zlib1g-dev # 克隆OpenWrt源码 git clone https://github.com/openwrt/openwrt.git cd openwrt ./scripts/feeds update -a ./scripts/feeds install -a ``` --- ### 2. **配置交叉编译工具链** ```bash # 选择目标平台(以ramips/mt7628为例) make menuconfig ``` 1. **Target System** → `MediaTek Ralink MIPS` 2. **Subtarget** → `MT7628 based boards` 3. **Target Profile** → 选择具体设备型号 4. **开启SystemTap支持**: ``` Utilities ---> <*> systemtap-runtime # 空格键选中 ``` --- ### 3. **编译SystemTap-runtime** ```bash # 单独编译软件包(避免全系统编译) make package/systemtap-runtime/compile V=s -j$(nproc) ``` **关键输出文件**: `bin/packages/<架构>/base/systemtap-runtime_<版本>_<架构>.ipk` --- ### 4. **部署到OpenWrt设备** ```bash # 上传ipk到设备 scp bin/packages/mipsel_24kc/base/systemtap-runtime*.ipk root@openwrt-device:/tmp # 在设备上安装 opkg install /tmp/systemtap-runtime*.ipk ``` --- ### 5. **验证安装** ```bash # 在OpenWrt设备上执行 stap -ve &#39;probe begin { printf("OpenWrt SystemTap Ready!\n"); exit() }&#39; ``` **成功输出**: ``` Pass 1: parsed user script... Pass 2: analyzed script: 1 probe... OpenWrt SystemTap Ready! ``` --- ### 注意事项 1. **内核符号匹配**: SystemTap需严格匹配内核版本,编译时需确保: ```bash make kernel_menuconfig # 确认开启CONFIG_DEBUG_INFO=y make kernel_compile V=s # 重新编译内核 ``` 2. **资源限制处理**: 嵌入式设备需调整脚本避免内存溢出: ```stap probe begin { printf("轻量级探测\n") exit() # 及时退出释放资源 } ``` 3. **交叉编译依赖**: 若编译报错,检查是否缺失: ```bash ./scripts/feeds install elfutils # SystemTap依赖库 ``` > ⚠️ **重要提示** > - SDK版本需与设备固件版本严格一致 > - 生产环境建议关闭`CONFIG_DEBUG_INFO`以节省空间[^1] > - 完整文档参考:[SystemTap on OpenWrt Wiki](https://openwrt.org/docs/guide-developer/systemtap) --- ### 编译问题排查 | **错误类型** | **解决方案** | |-------------|-------------| | `ERROR: kernel release mismatch` | 执行 `opkg install kernel-debug` 安装调试内核 | | `DWARF register number too large` | 升级SDK至OpenWrt 21.02+版本 | | `stap-server not found` | 手动安装`stap-server`包并启动服务 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值