在拆分导入C库的Golang代码时遇到问题

时间:2020-05-27 16:18:50

标签: c go gcc cgo

我写了一个导入C库的代码,当所有代码都在一个文件中时,它可以正常工作。但是,当我将代码拆分为两个文件,从而使该功能位于另一个文件中时,它将无法使用。 我运行Windows 10 x64,运行1.14,然后使用TDM-GCC-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

这是main.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()

...

functions.go

package main

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

我已经尝试过同时导入C库到一个或另一个文件中。它表示相同的问题。

你能帮我吗?

0 个答案:

没有答案