Error

無法使用 solc linux 二進製文件通過內聯彙編編譯程式碼

  • November 30, 2021

帶有內聯彙編的程式碼無法使用來自soliditylang.org 的solc 二進製文件進行編譯。使用 Remix 或 solcjs 編譯相同的程式碼沒有問題。由於這個問題,我什至無法編譯安全帽附帶的基本範例項目。我認為這不是一個錯誤,所以我錯過了什麼?

要複製,您可以在任何 linux 發行版上嘗試以下操作:

curl -O 'https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-contracts/master/contracts/utils/Address.sol'
curl -O 'https://binaries.soliditylang.org/linux-amd64/solc-linux-amd64-v0.8.10+commit.fc410830'
chmod +x solc-linux*
./solc-linux-amd64-v0.8.10+commit.fc410830 --bin Address.sol # fails due to inline assembly in the isContract function
solcjs --bin Address.sol # successfully compiles

(更新)這太瘋狂了:

  • 無法在我的電腦(fedora 33)和我擁有的另一台機器(void linux)上使用內聯彙編編譯程式碼
  • 當我使用 docker 通過 fedora:33 執行編譯器時進行編譯
  • 當我 ssh 到執行 fedora 33 的雲實例時編譯失敗,但其他人可以在同一台遠端機器上編譯執行相同的程式碼
  • 當我使用前面提到的 fedora:33 docker 實例 ssh 到同一個遠端雲實例機器時編譯
  • 當我 ssh 到另一個執行 Debian 的雲實例時編譯

解決了。當系統區域設置為土耳其語時,編譯器行為異常。我已經送出了一個錯誤報告。https://github.com/ethereum/solidity/issues/12350

引用自:https://ethereum.stackexchange.com/questions/114588