首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solidity编译器命令行实用程序(solcjs)各种问题

Solidity编译器命令行实用程序(solcjs)各种问题
EN

Ethereum用户
提问于 2017-08-23 09:32:05
回答 1查看 3.2K关注 0票数 0

我试图从命令行中使用solcjs编译一个文件,并遇到了各种问题。

首先,我需要在命令行中提供主文件导入的所有文件。

否则我会得到ParserError: Source "SomeFile.sol" not found: File not supplied initially

但是当我提供这些文件的时候,我会遇到很多其他的问题。

主要问题似乎是导入的文件中有一个驻留在子文件夹中。

首先,我注意到我不能使用反斜杠,也就是说,只能使用斜杠(我应该强调,我正在Windows上运行)。

所以我已经修好了。

然后我注意到我不能使用相对路径,即必须使用文件的完整路径。

所以我也修好了。

我能够通过自己编译特定的文件来检测和解决这些问题。

现在回到我最初的目标--一旦我在传递给solcjs的文件列表中指定了这个文件,我就会一直得到那个File not supplied initially错误。

下面是我使用的命令行:

代码语言:javascript
复制
solcjs --optimize --bin --abi -o build C:/project/util/file1.sol file2.sol main.sol

当我分别编译每个导入的文件时,我在abi输出目录中得到buildbin文件:

代码语言:javascript
复制
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

谢谢。

EN

回答 1

Ethereum用户

发布于 2017-08-23 10:55:31

如果您不只是试图在终端上编译文件,并且可以使用javascript进行编译,那么这个脚本可能会帮助您,这是我以前写过的。我还拥有多个依赖的合同文件,这些文件是编译主合同所必需的。所以我用以下方法解决了问题-

定义输入对象中的所有依赖契约,保持相同的导入顺序,然后使用该对象编译您的合同。

代码语言: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知识。

票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/24967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档