找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 2644|回复: 5

openwrt C库不兼容怎么处理

[复制链接]
发表于 2019-2-1 17:25 | 显示全部楼层 |阅读模式
openwrt 18.06以后的库去掉了uClibc,在openwrt CC版本下移植校准程序一点问题都没有,用musl库来编译高通校准软件nart有问题,会出现段错误,反复调试,极可能是c库的问题。各位大神都怎么解决高通芯片无线校准这个问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2019-2-1 17:56 | 显示全部楼层
用uclibc的交叉编译工具静态编译就可以了,这样就没有库的依赖了。

想思考OpenWrt开发,但是摸不着门道?自学没毅力?怕太难学不会?快关注<跟着佐大学OpenWrt开发入门培训班>保证你能学有所成,报名地址:http://forgotfun.org/2018/04/openwrt-training-2018.html
回复 支持 反对

使用道具 举报

发表于 2019-2-1 18:08 来自手机 | 显示全部楼层
把 GCC 换成 8.2.0 试试
回复 支持 反对

使用道具 举报

发表于 2019-2-1 18:10 来自手机 | 显示全部楼层
gcc静态链接,-static
回复 支持 反对

使用道具 举报

发表于 2019-2-1 18:55 来自手机 | 显示全部楼层
我靠,全是大雕
回复 支持 反对

使用道具 举报

发表于 2019-2-1 19:59 | 显示全部楼层
解决C库问题法一:更换musl为uclibc
也即更改编译器。
(1).修改/toolchain/Config.in
  --- a/toolchain/Config.in
  +++ b/toolchain/Config.in
  &#8203;
      config LIBC_USE_UCLIBC
          select USE_UCLIBC
  &#8203;
  - bool "Use uClibc"
  &#8203;
  - bool "Use uClibc-ng"
          depends on !(aarch64 || aarch64_be)
  &#8203;
  - depends on BROKEN || !(arm || armeb || i386 || x86_64 || mips || mipsel || mips64 || mips64el || powerpc)
(2).修改/toolchain/uClibc/Makefile
  --- a/toolchain/uClibc/Makefile
  +++ b/toolchain/uClibc/Makefile
  &#8203;
   define Host/SetToolchainInfo
      $(SED) 's,^\(LIBC_TYPE\)=.*,\1=$(PKG_NAME),' $(TOOLCHAIN_DIR)/info.mk
  &#8203;
  - $(SED) 's,^\(LIBC_URL\)=.*,\1=http://www.uclibc.org/,' $(TOOLCHAIN_DIR)/info.mk
  &#8203;
  - $(SED) 's,^\(LIBC_URL\)=.*,\1=http://www.uclibc-ng.org/,' $(TOOLCHAIN_DIR)/info.mk
    $(SED) 's,^\(LIBC_VERSION\)=.*,\1=$(PKG_VERSION),' $(TOOLCHAIN_DIR)/info.mk
      $(SED) 's,^\(LIBC_SO_VERSION\)=.*,\1=$(LIBC_SO_VERSION),' $(TOOLCHAIN_DIR)/info.mk
     endef
(3).修改toolchain/uClibc/headers/Makefile
  --- a/toolchain/uClibc/headers/Makefile
  +++ b/toolchain/uClibc/headers/Makefile
  &#8203;
          CC="$(TARGET_CC)" \
          CPU_CFLAGS="$(TARGET_CFLAGS)" \
          ARCH="$(CONFIG_ARCH)" \
  &#8203;
  - pregen \
          install_headers
     endef
(4).如果要修改使用的uclibc-ng版本,需要修改toolchain/uClibc/common.mk里面的版本号和对应sha值。
(5).上述修改完成后,后续make menuconfig里面就可以选择到uclibc-ng了。一路回车选中。
  
  • Advanced configuration options (for developers)  --->
          
  •    Toolchain Options  --->
              C Library implementation (Use musl)  --->
    到这里回车就可以选择uclibc-ng。
    法二:makefile里面去掉编译时musl中不存在的库文件
    也即更改代码。
    musl部分文档
    musl is only one lib file Threads, math, clock_gettime() , etc. are always available without needing -lm , -lpthread , etc. Even the dynamic linker is integrated. Empty libm.a , libpthread.a , etc. are provided for build-time compatibility (and conformance). There is no libm.so , libpthread.so , etc.
    即musl不包含uclibc的那些线程库之类的,而是以一个单独的-lc取代了。因此这一类的Lib库不需要也不能在makefile里写,删去这些,加入-lc即可。
      - LFLAGS +=  -lpthread -ldl -luci -lm
      + LFLAGS += -lc -ldl -luci
    根据比较,musl在嵌入式编译上还是有明显优势的。

  • 回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    欢迎大家光临恩山无线论坛上一条 /1 下一条

    有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

    GMT+8, 2024-6-3 23:23

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    | 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

    快速回复 返回顶部 返回列表