亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

macOS Catalina 升級后 Go 程序無法運行

macOS Catalina 升級后 Go 程序無法運行

Go
海綿寶寶撒 2022-07-04 16:59:20
這可能是一個奇怪的問題,但是在 MacOS Catalina 升級后,一些用 Go 編寫的程序將無法在我的 MacBook Pro 上運行。然而,一個基本的“Hello World”程序運行,但是我正在使用使用net/http包編寫程序我得到以下錯誤:注意:程序是正確的,它們在 Docker 容器中運行良好輸出(IntelliJ):# runtime/cgoIn 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'我已經嘗試過的事情:重新安裝go重新安裝xcode檢查GOPATH&GOROOT是否設置正確用過的:MacOS version - Catalina 10.15.6 Go version - go1.15.2 darwin/amd64
查看完整描述

3 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

輸入xcode-select -print-path終端窗口并檢查您的安裝目錄。就我而言,輸出是:/Applications/Xcode.app/Contents/Developer

如果情況相同,則在終端上使用以下命令可以解決問題:

sudo xcode-select --switch /Library/Developer/CommandLineTools

另一種選擇是使用本期中提到的 CGO_CPPFLAGS 但它可以在會話中工作:

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



查看完整回答
反對 回復 2022-07-04
?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

這是<pthread.h>macOS 工具附帶的一個錯誤:

這個宏甚至是虛假的,原因不止一個!中的定義<pthread.h>是這樣的:

#define _PTHREAD_SWIFT_IMPORTER_NULLABILITY_COMPAT \
    defined(SWIFT_CLASS_EXTRA) && (!defined(SWIFT_SDK_OVERLAY_PTHREAD_EPOCH) || (SWIFT_SDK_OVERLAY_PTHREAD_EPOCH < 1))

宏擴展沒有正確括起來。宏在同一個文件中以這種方式使用:

#if !_PTHREAD_SWIFT_IMPORTER_NULLABILITY_COMPAT

擴展為:

#if !defined(SWIFT_CLASS_EXTRA) && (!defined(SWIFT_SDK_OVERLAY_PTHREAD_EPOCH) || (SWIFT_SDK_OVERLAY_PTHREAD_EPOCH < 1))

!僅適用于第一個測試而不適用defined(SWIFT_CLASS_EXTRA)于整個布爾表達式。

編譯器沒有檢測到這個問題,它只是抱怨defined來自宏擴展的預處理器運算符,它具有 C 標準中指定的未定義行為:

6.10.1 條件包含

[...]

約束

1 控制條件包含的表達式應該是一個整數常量表達式,除了:它可能包含以下形式的一元運算符表達式

defined identifier

或者

defined ( identifier )

它評估1標識符當前是否定義為宏名稱(即,如果它是預定義的,或者它是否是#define預處理指令的主題,而沒有#undef具有相同主題標識符的干預指令),0如果不是。

2 在所有宏替換發生后剩余的每個預處理標記(在將成為控制表達式的預處理標記列表中)應采用詞法形式的標記(6.4)。

語義

3 表單的預處理指令

# if常量表達式換行組選擇

# elif常量表達式換行組選擇

檢查控制常量表達式的計算結果是否為非零。

4 在評估之前,預處理標記列表中將成為控制常量表達式的宏調用被替換(除了那些由定義的一元運算符修改的宏名稱),就像在普通文本中一樣。如果令牌defined是作為替換過程的結果生成的,或者defined一元運算符的使用與宏替換之前的兩種指定形式之一不匹配,則行為未定義。在執行了由于宏擴展和defined一元運算符而導致的所有替換之后,所有剩余的標識符(包括那些在詞法上與關鍵字相同的標識符)都被替換為 pp-number0,然后將每個預處理令牌轉換為一個令牌。結果標記組成控制常量表達式,根據 6.6 的規則進行評估。出于此令牌轉換和評估的目的,所有有符號整數類型和所有無符號整數類型的行為就好像它們分別具有與header 中定義的類型intmax_t和定義相同的表示形式。這包括解釋字符常量,這可能涉及將轉義序列轉換為執行字符集成員。這些字符常量的數值是否與表達式中出現相同字符常量時獲得的值相匹配(除了在一個或uintmax_t<stdint.h>#if#elif指令)是實現定義的。此外,單字符字符常量是否可能具有負值是實現定義的。

這個相關的短語是如果令牌defined是作為這個替換過程的結果生成的,或者defined一元運算符的使用與宏替換之前的兩種指定形式之一不匹配,則行為是未定義的。

目前尚不清楚生成只是意味著作為宏擴展的一部分生成,或者更具體地說是通過令牌粘貼生成。clang似乎認為任何defined由宏擴展產生的標記在#if控制表達式中都有未定義的行為。

出于這兩個原因,這似乎是<pthread.h>蘋果要修復的一個錯誤。


查看完整回答
反對 回復 2022-07-04
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

遺憾的是,所有的試訓都沒有奏效。

我已經使用 IntelliJ IDEA Ultimate 有一段時間了。所以我嘗試使用 IDE 設置 Go SDK、GOROOT 和 GOPATH(我想到了一個想法)。

我在我的 MacBook 上卸載/刪除了與 Go 相關的所有內容。

然后我在 IntelliJ IDEA 上安裝了 Go 插件,果然提示 Go SDK 不可用,GOROOT 和 GOPATH 都沒有設置。

我按照說明進行操作,其余的由 IntelliJ IDEA 負責!

它下載并安裝了 Go SDK,讓我選擇 GOPATH,它索引了一些東西,現在一切都像魅力一樣工作!


查看完整回答
反對 回復 2022-07-04
  • 3 回答
  • 0 關注
  • 518 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號