码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 记一次 Golang 的奇怪错误


    文章目录

      • 1. 写在最前面
      • 2. 短期解决方案
        • 2.1 试试是否是必现
        • 2.2. 禁用 cgo 试试
      • 3. 长期解决方案
          • 3.1 从根本上解决问题
          • 3.2 设置 go env 参数
          • 3.3 设置参数的意思
          • 3.4 坏处
      • 4. 碎碎念
      • 5. 参考资料

    1. 写在最前面

    今天在编译 go 程序、以及跑 go test 测试用例的时候,突然就报错误「In file included from gcc_darwin_arm64.c:6:」,导致无法编译和测试。

    在这里插入图片描述

    遇到这个错误,笔者表示十分懵逼,但是作为一个专业的软件开发工程师,遇到问题不可怕,可怕的是没有排查的方向。

    2. 短期解决方案

    2.1 试试是否是必现

    本着排查的思路,写了一个最简单的 「hello world」的程序,发现并不会报错。所以不是百分百复现的问题。
    在这里插入图片描述

    2.2. 禁用 cgo 试试

    看报错的内容中包括「# runtime/cgo」,盲猜是在开发的程序引用了 cgo,毕竟有今天必现提测的大山压着,不管三七二十禁用 cgo 试试。

    在这里插入图片描述

    3. 长期解决方案

    赶在提测前构建好了测试包,也是时候有没有从源头解决问题的方法,毕竟每次 build 、test 的时候输入 「CGO_ENABLED=0」应该也算是对生命的一种浪费吧!

    3.1 从根本上解决问题

    google 大法真的是好,但是要学会站点搜索的使用技巧,不然就会像我上次一样啥也找不到。

    未加站点搜索

    在这里插入图片描述

    加站点搜索

    在这里插入图片描述

    3.2 设置 go env 参数

    点开 「Stack Overflow」第一条尝试一下,就找到了解决问题的长久方案。设置 CGO_CPPFLAGS 的值为 -Wno-error -Wno-nullability-completeness -Wno-expansion-to-defined -Wbuiltin-requires-header

    在这里插入图片描述

    3.3 设置参数的意思

    知其然,还要之前所以然。本着求知好学的精神,笔者请教了下隔壁的 C++ 大佬。-Wno-error 这个参数的意思就是在编译的时候不要将 worning 作为 error 。

    注:-Wno-error| -Wno-nullability-completeness | -Wno-expansion-to-defined 这三项参数的大意差不多

    所有是不是只设置 -Wno-error 这个值也能解决笔者的问题?

    答案:不可以的,但是发现-Wbuiltin-requires-header 这个参数不是必需的。只设置-Wno-error -Wno-nullability-completeness -Wno-expansion-to-defined 这三项编译就不会再报错。

    在这里插入图片描述

    3.4 坏处

    出现这个问题的根本原因,可能是编译器升级后对 C++ 的语法校验更加严格,之前是 warning 的错误,在严格后作为 error 报出。

    上面这种长久解决的方式,「有可能会让我们在编译阶段忽视了可能存在的错误」。

    4. 碎碎念

    • 不是所有人都能功成名就,我们中有些人注定是要在日常生活的点滴中寻找生命的意义。
    • 那些令你一下子长大的事情,你要永远记得。
    • 意识到自己的无知,意识到应该努力,学习也是会像毒品一样上瘾的。

    5. 参考资料

    • Go programs won’t run after MacOS Catalina upgrade
    • Xcode Compile Flag to Suppress Nullability Warnings not Working?
    • Consider enabling -Wno-expansion-to-defined for gcc 7
    • Fix clang error builtin-requires-header on pthread_create
    • Clang flags
    • golang 环境变量和 golang 脚本工具
    • 谷歌搜索语法(一)基本语法
  • 相关阅读:
    elementplus下载表格为excel格式
    第41节——页面中使用路由
    OpenXR Reference Space浅析
    .NET开源分布式锁DistributedLock
    Redis启动时提示Creating Server TCP listening socket *:6379: bind: No error
    自动控制原理6.4---前馈校正
    ijkplayer基于rtsp直播延时的深度优化
    Java网关的统一异常处理
    CSS3心跳和小球跳动animation案例
    Re26:读论文 Don’t Stop Pretraining: Adapt Language Models to Domains and Tasks
  • 原文地址:https://blog.csdn.net/phantom_111/article/details/126839864
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号