Solc kann unter Mac OS X nicht installiert werden

Ich kann Solc nicht unter Mac OS X installieren. Ich habe Folgendes versucht:

npm install solc 

/Users/punddalinni
└── solc@0.3.0-1 
npm WARN enoent ENOENT: no such file or directory, open '/Users/punddalinni/package.json'
npm WARN punddalinni No description
npm WARN punddalinni No repository field.
npm WARN punddalinni No README data
npm WARN punddalinni No license field.

Wenn ich zurück nach Geth gehe und renne

> eth.getCompilers()
[""]

Als ich versuchte, setSolc zu setzen, passierte Folgendes

> admin.setSolc('/Users/punddalinni/node_modules/solc')
exec: "/Users/punddalinni/node_modules/solc": permission denied
    at InvalidResponse (<anonymous>:-81662:-57)
    at send (<anonymous>:-156322:-57)
    at setSolc (<anonymous>:-133322:-57)
    at <anonymous>:1:1

Ich habe versucht, den Anweisungen hier zu folgen, aber es bleibt hängen

brew install llvm --HEAD --with-clang

BEARBEITEN: Einschließen des Inhalts von package.json von solc in Mac.

{
  "_args": [
    [
      "solc",
      "/Users/punddalinni"
    ]
  ],
  "_from": "solc@latest",
  "_id": "solc@0.3.0-1",
  "_inCache": true,
  "_installable": true,
  "_location": "/solc",
  "_nodeVersion": "4.0.0",
  "_npmOperationalInternal": {
    "host": "packages-13-west.internal.npmjs.com",
    "tmp": "tmp/solc-0.3.0-1.tgz_1457892692634_0.5487515390850604"
  },
  "_npmUser": {
    "email": "d11e9@turkd.net",
    "name": "d11e9"
  },
  "_npmVersion": "3.3.2",
  "_phantomChildren": {},
  "_requested": {
    "name": "solc",
    "raw": "solc",
    "rawSpec": "",
    "scope": null,
    "spec": "latest",
    "type": "tag"
  },
  "_requiredBy": [
    "#USER"
  ],
  "_resolved": "https://registry.npmjs.org/solc/-/solc-0.3.0-1.tgz",
  "_shasum": "523e79db0c69070f91fcbf408e8c7d0c93be176c",
  "_shrinkwrap": null,
  "_spec": "solc",
  "_where": "/Users/punddalinni",
  "author": {
    "name": "chriseth"
  },
  "bugs": {
    "url": "https://github.com/chriseth/browser-solidity/issues"
  },
  "dependencies": {},
  "description": "Solidity compiler",
  "devDependencies": {},
  "directories": {},
  "dist": {
    "shasum": "523e79db0c69070f91fcbf408e8c7d0c93be176c",
    "tarball": "http://registry.npmjs.org/solc/-/solc-0.3.0-1.tgz"
  },
  "gitHead": "5ce686c8d33db78c8f1eb8e2318eefbc5151f0eb",
  "homepage": "https://github.com/chriseth/browser-solidity#readme",
  "keywords": [
    "compiler",
    "ethereum",
    "solidity"
  ],
  "license": "MIT",
  "main": "index.js",
  "maintainers": [
    {
      "name": "chriseth",
      "email": "c@ethdev.com"
    },
    {
      "name": "d11e9",
      "email": "d11e9@turkd.net"
    }
  ],
  "name": "solc",
  "optionalDependencies": {},
  "readme": "ERROR: No README data found!",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/chriseth/browser-solidity.git"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "version": "0.3.0-1"
}

Irgendwelche Ideen?

Antworten (2)

Ich war mit NPM nicht vertraut, hatte also einige ähnliche Probleme. Durch einfaches Ausführen npm install solcwird versucht, lokal zu installieren, was zu Berechtigungs- und Verknüpfungsproblemen führen kann – dies ist wahrscheinlich die Ursache des Problems.

Installieren Sie stattdessen solC global mit $ npm install -g solc(Sie können es auch versuchen, $ npm install solc --globalda ich nicht sicher bin, welcher dieser beiden Befehle mein Problem behoben hat).

Wenn dies installiert ist, überprüfen Sie, wo es installiert wurde, indem Sie es ausführen, $ which solcjswas so etwas wie ergeben sollte/usr/local/bin/solcjs

Ich stellte fest, dass ich auch Homebrew verwenden musste, um solC zu installieren/erstellen, indem ich den Installationsanweisungen folgte. Sobald Brew fertig war, überprüfte ich, ob solC mit installiert wurde $ which sol.

Kopieren Sie dieses Verzeichnis und geth consoleverwenden Sie es nach dem Start im Befehl setSolc, z> admin.setSolc("/usr/local/bin/solc")

Mit etwas Glück erhalten Sie eine Bestätigungsnachricht, und beim nächsten Lauf > eth.getCompilers()sollte das Ergebnis in etwa so aussehen["Solidity"]

Ah ... Sie verwenden das falsch. Web3-Tutorials spiegeln dies nicht wider, aber es gibt einen Unterschied zwischen der Art und Weise, wie Sie Solidity zum Kompilieren auf web3 mit dem aus der Quelle erstellten Compiler (was web3 annimmt) und dem npm-Paket (um das sich die Tutorials nicht drehen) einrichten. . Um Dinge zu kompilieren, müssen Sie die Anweisungen auf der Seite Browser-solidity befolgen:

https://github.com/chriseth/browser-solidity

Auszug:

var solc = require('solc');
var input = "contract x { function g() {} }";
var output = solc.compile(input, 1); // 1 activates the optimiser

for (var contractName in output.contracts) {
    // code and ABI that are needed by web3
    console.log(contractName + ': ' + output.contracts[contractName].bytecode);
    console.log(contractName + '; ' + JSON.parse( output.contracts[contractName].interface));
}
Ich habe versucht, das innerhalb von Geth auszuführen, aber bekomme das. Ist das > var solc = require('solc'); Cannot find module 'solc' at a (<anonymous>:-160:-28) at require (<anonymous>:-122:-28) at <anonymous>:1:12auch ein OS X-Problem? Da ich auch eine Ubuntu-Testchain verwende und dort Verträge zusammenstelle, folge ich einfach den üblichen Schritten, wie hier beschrieben (Einstellung source = minifiedContract, etc.)
Nö. Auch kein Problem, dessen wir uns bewusst sind. Können Sie den Inhalt Ihrer package.json auflisten?
Habe es der Frage hinzugefügt.
Nein, nicht die solc package.json, Ihre persönliche package.json, diejenige, aus der Sie das Projekt erstellen.
Entschuldigung, aber ich bin neu auf diesem Gebiet. Ich glaube nicht, dass ich verstehe, was Sie sagen. In welchem ​​Verzeichnis soll das sein?
Dies ist eine node.js-Frage, die Sie stellen. Um ein node.js-Projekt zu erstellen, müssen Sie das Projekt zuerst mit etwas wie npm init initialisieren, danach sollten Sie eine package.json-Datei in Ihrem Projektverzeichnis haben. Von dort aus können Sie das solc-Paket lokal mit einem npm install solc installieren und es wird automatisch in Ihren node_modules-Ordner geleitet.