简体   繁体   中英

package .: C source files not allowed when not using cgo or SWIG: main.c

For simplicity, I created two "Hello World" programs in the same directory, called main.go and main.c .

Golang:

package main

import "fmt"

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

C:

#include <stdio.h>

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

And both programs compile and run okay:

Golang 和 C 中的你好世界

But as you can see, VSCode is giving me an error that says:

package .: C source files not allowed when not using cgo or SWIG: main.c

According to this answer , I have to remove and reinstall Go, and install the newer version that is above 1.5. So I ran this command to see where it's installed:

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

And then I removed that directory:

$ sudo rm -rf /usr/local/go

Now the command no longer works:

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

To make sure, I also deleted the go directory in $HOME :

$ sudo rm -rf $HOME/go

I also checked to see if I may have installed it through pacman , but there's no go package in the output:

$ 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

Then I downloaded and extracted go1.15.3.linux-amd64.tar.gz into /usr/local/ :

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

Now I can see that it's installed:

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

I also have this directory in the $PATH , as I add this export command in my ~/.zshrc file:

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

Now I close VSCode and reopen it, but the same error is there.

One answer suggests that the $GOROOT variable must be set to the right directory, currently this variable for me is empty. So I add this export in my ~/.zshrc file:

export GOROOT=/usr/local/go

But the error is still there. How can I fix this?

You need to

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

and you need to change the c function name from main() to something else in your C file to avoid multiple definition of it when compiling.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM