登录
首页 >  Golang >  Go问答

MacOS Catalina 升级后 Go 程序无法运行

来源:stackoverflow

时间:2024-03-17 15:18:30 111浏览 收藏

在 macOS Catalina 升级后,部分 Go 程序在 MacBook Pro 上运行时遇到困难。尽管简单的“hello world”程序运行正常,但使用 net/http 包的程序却出现错误,提示 pthread.h 宏扩展导致未定义行为。经过尝试重新安装 Go 和 Xcode 以及检查环境变量后,问题仍未解决。

问题内容

这可能是一个奇怪的问题,但在 macos catalina 升级后,一些用 go 编写的程序将无法在我的 macbook pro 上运行。

但是,运行了一个基本的“hello world”程序,但是当我使用 net/http 包编写程序时,出现以下错误:

注意:程序是正确的,它们在 docker 容器中运行良好

输出(intellij):

# runtime/cgo
in file included from gcc_darwin_amd64.c:6:
/usr/local/include/pthread.h:331:6: error: macro expansion producing 'defined' has undefined behavior [-werror,-wexpansion-to-defined]
/usr/local/include/pthread.h:200:2: note: expanded from macro '_pthread_swift_importer_nullability_compat'
/usr/local/include/pthread.h:331:6: error: macro expansion producing 'defined' has undefined behavior [-werror,-wexpansion-to-defined]
/usr/local/include/pthread.h:200:34: note: expanded from macro '_pthread_swift_importer_nullability_compat'
/usr/local/include/pthread.h:540:6: error: macro expansion producing 'defined' has undefined behavior [-werror,-wexpansion-to-defined]
/usr/local/include/pthread.h:200:2: note: expanded from macro '_pthread_swift_importer_nullability_compat'
/usr/local/include/pthread.h:540:6: error: macro expansion producing 'defined' has undefined behavior [-werror,-wexpansion-to-defined]
/usr/local/include/pthread.h:200:34: note: expanded from macro '_pthread_swift_importer_nullability_compat'

我已经尝试过的事情:

  1. 重新安装 go
  2. 重新安装 xcode
  3. 检查 gopathgoroot 是否设置正确

使用:

MacOS version - Catalina 10.15.6
Go version - go1.15.2 darwin/amd64

解决方案


遗憾的是,所有的尝试都没有成功。

我已经使用 intellij idea ultimate 一段时间了..所以我尝试使用 ide 设置 go sdk、goroot 和 gopath(只是我想到的一个想法)。

我在 macbook 上卸载/删除了与 go 相关的所有内容。

然后我在intellij idea上安装了go插件,果然提示go sdk不可用,goroot和gopath都没有设置。

我按照说明进行操作,intellij idea 负责剩下的事情!

它下载并安装了 go sdk,要求我选择 gopath,它索引了一些东西,现在一切都工作得很好!

在终端窗口中输入 xcode-select -print-path 并检查你的安装目录。在我的例子中,输出是:/applications/xcode.app/contents/developer

如果情况相同,则在终端上使用以下命令可以修复问题:

sudo xcode-select --switch /library/developer/commandlinetools

另一个选项是使用 issue 中提到的 cgo_cppflags,但它可以在会话中工作:

export CGO_CPPFLAGS="-Wno-error -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-builtin-requires-header"

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>