我试图从命令行中使用solcjs编译一个文件,并遇到了各种问题。
首先,我需要在命令行中提供主文件导入的所有文件。
否则我会得到ParserError: Source "SomeFile.sol" not found: File not supplied initially。
但是当我提供这些文件的时候,我会遇到很多其他的问题。
主要问题似乎是导入的文件中有一个驻留在子文件夹中。
首先,我注意到我不能使用反斜杠,也就是说,只能使用斜杠(我应该强调,我正在Windows上运行)。
所以我已经修好了。
然后我注意到我不能使用相对路径,即必须使用文件的完整路径。
所以我也修好了。
我能够通过自己编译特定的文件来检测和解决这些问题。
现在回到我最初的目标--一旦我在传递给solcjs的文件列表中指定了这个文件,我就会一直得到那个File not supplied initially错误。
下面是我使用的命令行:
solcjs --optimize --bin --abi -o build C:/project/util/file1.sol file2.sol main.sol当我分别编译每个导入的文件时,我在abi输出目录中得到build和bin文件:
solcjs --optimize --bin --abi -o build C:/project/util/file1.sol
solcjs --optimize --bin --abi -o build file2.sol但是无论我做什么,我都无法编译主文件。
编译器版本是0.4.15+commit.bbb8e64f.Emscripten.clang。
谢谢。
发布于 2017-08-23 10:55:31
如果您不只是试图在终端上编译文件,并且可以使用javascript进行编译,那么这个脚本可能会帮助您,这是我以前写过的。我还拥有多个依赖的合同文件,这些文件是编译主合同所必需的。所以我用以下方法解决了问题-
定义输入对象中的所有依赖契约,保持相同的导入顺序,然后使用该对象编译您的合同。
var input = {
'strings.sol': fs.readFileSync('strings.sol', 'utf8'),
'StringLib.sol': fs.readFileSync('StringLib.sol', 'utf8'),
'Killable.sol': fs.readFileSync('Killable.sol', 'utf8'),
'Ownable.sol': fs.readFileSync('Ownable.sol', 'utf8'),
'LMS.sol': fs.readFileSync('LMS.sol', 'utf8')
};
let compiledContract = solc.compile({sources: input}, 1);希望这能有所帮助。
注意:这需要基本的nodejs知识。
https://ethereum.stackexchange.com/questions/24967
复制相似问题