Golang的exec.Command无法运行C二进制文件。

3

我使用exec.Command和exec.Start()执行一个C可执行文件。我的C可执行文件位于当前目录,这是我的代码:

cmd := exec.Command("./a.out")
// stdout,err := cmd.StderrPipe()
stderr,_ := cmd.StderrPipe()

err := cmd.Start()
if err != nil {
    log.Fatal(err)
}

log.Printf("Waiting for command to finish...")
s,err := ioutil.ReadAll(stderr)
log.Printf(string(s))
err = cmd.Wait()
log.Printf("Command finished with error: %v", err)

当我运行此代码时,输出结果如下:
2014/12/10 07:49:39 Waiting for command to finish...
2014/12/10 07:49:39 Command finished with error: exit status 11

我的C语言Hello World程序是:

#include <stdio.h>
int main(){
printf("hello world");
}

这段C代码是使用gcc版本4.8.2编译的,可执行文件名为a.out。

C语言的可执行文件a.out是一个简单的"hello world"程序,我能够得到正确的输出结果,但是我不明白为什么exec.Wait()函数以状态码11而不是0退出。

在Linux终端上运行这个可执行文件('a.out')时没有出现任何故障或错误。


你能同时发布C语言“Hello world”程序的清单吗? - Michael Foukarakis
我在上面的问题中发布了我的C语言Hello World程序。 - Surendra Bobba
1个回答

4

我从Github 这里得到了答案。

返回11是因为输出长度为11,而我的hello world程序中没有返回语句。所以当它结束时,main函数从AX寄存器返回。


太好了。+1。我会删除我的回答。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接