3 回答

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"

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>
蘋果要修復的一個錯誤。

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,它索引了一些東西,現在一切都像魅力一樣工作!
- 3 回答
- 0 關注
- 518 瀏覽
添加回答
舉報