【问题标题】:package .: C source files not allowed when not using cgo or SWIG: main.cpackage .: 不使用 cgo 或 SWIG 时不允许使用 C 源文件:main.c
【发布时间】:2020-10-22 20:48:46
【问题描述】:

为简单起见,我在同一目录中创建了两个“Hello World”程序,分别称为main.gomain.c

Golang:

package main

import "fmt"

func main() {
    fmt.Println("Hello World!")
}

C:

#include <stdio.h>

int main() {
    printf("Hello World!\n");
    return 0;
}

两个程序都可以编译和运行:

但是正如你所看到的,VSCode 给了我一个错误,上面写着:

package .: 不使用 cgo 或 SWIG 时不允许使用 C 源文件: main.c

根据this answer,我必须删除重新安装去,安装1.5以上的较新版本。所以我运行了这个命令来查看它的安装位置:

$ which go
/usr/local/go/bin/go

然后我删除了那个目录:

$ sudo rm -rf /usr/local/go

现在命令不再起作用:

$ go version
zsh: command not found: go
$ which go
go not found

为了确保,我还删除了$HOME中的go目录:

$ sudo rm -rf $HOME/go

我还检查了我是否通过pacman 安装了它,但输出中没有go 包:

$ pacman -Q | grep go
argon2 20190702-3
go-tools 2:1.14+3923+c00d67ef2-1
haskell-vector-algorithms 0.8.0.3-21
pango 1:1.44.7+11+g73b46b04-1
pangomm 2.42.1-2

然后我下载go1.15.3.linux-amd64.tar.gz并解压成/usr/local/

$ sudo tar -C /usr/local -xzf go1.15.3.linux-amd64.tar.gz

现在我可以看到它已安装:

$ go version
go version go1.15.3 linux/amd64
$ which go
/usr/local/go/bin/go

我在$PATH 中也有这个目​​录,因为我在我的~/.zshrc 文件中添加了这个export 命令:

export PATH=$PATH:/usr/local/go/bin

现在我关闭 VSCode 并重新打开它,但仍然存在同样的错误。

One answer suggests $GOROOT 变量必须设置到正确的目录,目前这个变量对我来说是空的。所以我在我的~/.zshrc 文件中添加了这个export

export GOROOT=/usr/local/go

但错误仍然存​​在。我该如何解决这个问题?

【问题讨论】:

    标签: linux go


    【解决方案1】:

    你需要

    package main
    import(
        "fmt
    )
    import "C"
    func main() {
    ...
    }
    

    并且您需要将 c 函数名称从 main() 更改为 C 文件中的其他名称,以避免在编译时对其进行多次定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 2018-01-17
      • 1970-01-01
      相关资源
      最近更新 更多