Возникла проблема с разделением кода Golang, который импортирует библиотеку C - PullRequest
0 голосов
/ 27 мая 2020

Я написал код, который импортирует библиотеку C и отлично работает, когда все в одном файле. Но когда я разбиваю код на два файла, так что функция находится в другом файле, это не работает. Я запускаю Windows 10 x64, Go 1.14 и использую TDM-G CC -64.

Когда я выполняю go run ., он возвращает эту проблему:

# v0
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: $WORK\b001\_x008.o: in function `main':
./swemini.c:74: multiple definition of `main'; $WORK\b001\_cgo_main.o:/tmp/go-build/_cgo_main.c:1: first defined here
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: $WORK\b001\_x015.o: in function `main':
./swetest.c:737: multiple definition of `main'; $WORK\b001\_cgo_main.o:/tmp/go-build/_cgo_main.c:1: first defined here
collect2.exe: error: ld returned 1 exit status

Это часть основных. go

package main

//#cgo CFLAGS: -I C:/Go-Project/src/Astrocal
//#cgo LDFLAGS: -L C:/Go-Project/src/Astrocal -lswedll64
//#include "swephexp.h"
import "C"
import "fmt"

func main() {
    var xx [6]C.double
    var serr string
    var serr_C *C.char = C.CString(serr)
    var ret C.int32

    fmt.Printf("The OK constant is: %d\n", C.OK)

    sweSetEphePath()

...

функций. go

package main

func sweSetEphePath() {
    C.swe_set_ephe_path(C.CString("C:/sweph/ephe"))
}

Я уже пробовал импортировать библиотеку C в тот или иной файл , и одновременно. Это указывает на ту же проблему.

Вы можете мне помочь?

...