码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 联盛德W801系列8-编译链接时找不到标准数学库函数的解决方法


    文章目录

    • 1.问题的出现和解决
    • 2. gcc -l 参数说明
    • 3.又有错误undefined reference to `__cxa_guard_acquire'
    • 附录:参考资料:

    之前的笔记《联盛德W801系列4-MQTT使用》出现过编译《cjson.c》出错,找不到标准数学函数pow(幂函数,在转换科学记数法表示的字符串用到),floor(浮点取整函数),当时因为没有用到这些功能,就直接注释相关报错行,但求能通过编译,没有去解决根本问题。
    昨天在移植GUI源码,用到三角函数,又出现这个错误,就到联盛德问答社区提问。
    我的问题页面:http://ask.winnermicro.com/question/325.html,
    5分钟内立刻有专家帮我解答。因为有其他网友之前提过类似的问题:http://ask.winnermicro.com/question/291.html
    这次有点空闲时间,我就找一下相关知识看看,补补欠缺,并做笔记。
    先来看看问题的表象。

    1.问题的出现和解决

    尽管已经包含了 ,链接时找不到pow和floor函数。
    在这里插入图片描述
    在这里插入图片描述
    解决方法:

    1.通过下面的方法进入工程设置:
    在这里插入图片描述
    2.在 linker页面的 Library Name增加m,用分号隔开。再次编译就可以正常使用数学 函数。
    在这里插入图片描述

    CDK默认库目录下面有这些库:
    在这里插入图片描述

    2. gcc -l 参数说明

    这里的-l是L的小写。
    -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是 libm.a,很容易看出,把库文件名的头lib和尾.a去掉就是库名了。cdk默认库的目录是 《$(CDKPath)/CSKY/MinGW/csky-abiv2-elf-toolchain/csky-elfabiv2/lib》。
    看到这里,就知道怎么为何增加m就可以解决问题。下面再扩展一下。
    当我们自已要用到一个第三方提供的库名字libtest.a,那么我们只要把libtest.a拷贝到默认库的目录里,编译时加上-ltest参数,我们就能用上libtest.a库了(当然要用libtest.a库里的函数,我们还需要与libtest.a配套的头文件);但如果库文件没放在这个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/bin/ld: cannot find -lxxx”,也就是链接程序ld在这个目录里找不到libxxx.a,这时另外一个参数-L就派上用场了,比如常用的X11的库,它在/usr/X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。再比如我们把libtest.a放在/aaa/bbb/ccc目录下,那链接参数就是-L/aaa/bbb/ccc -ltest。

    3.又有错误undefined reference to `__cxa_guard_acquire’

    错误现象:
    在这里插入图片描述

    《UIcode.cpp》是c++文件,函数内部的静态局部变量的初始化是在函数第一次调用时执行,编译器会用函数__cxa_guard_acquire; 用来保证在之后的调用中不会对其重复初始化。这个函数存在于libstdc++库里面,这个库还是编译器自带的,只要在我们的工程中增加-lstdc++就可以了。那我们依照增加数学函数库的方法来解决问题。

    在这里插入图片描述
    保存,重新编译。编译成功。功能正常。

    附录:参考资料:

    1. 《gcc -I -L -l区别》
    2. 联盛德问答社区的相关页面:http://ask.winnermicro.com/question/291.html
  • 相关阅读:
    CAS:474922-22-0,DSPE-PEG-MAL,磷脂-聚乙二醇-马来酰亚胺科研试剂供应
    问题随记 —— PyCharm 连接远程服务器的 Python 环境
    利用 Docker 编译 OpenWrt
    java-php-python--公益劳动招募管理系统-计算机毕业设计
    MediaTek MT7915 Module 2T2R DR7915/Wallys Wi-Fi 6 Wave 1+ chipset
    CSRF攻击(2), 绕过Referer防御
    每个架构师都值得拥有的一份Netty开发实战(附带面试专题)
    ISAC通信感知一体化学习记录
    3.1. 数学函数
    Python 微信自动化工具开发系列02_自动获取微信多个好友聊天信息(2022年7月可用)
  • 原文地址:https://blog.csdn.net/hwd00001/article/details/126544457
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号