Go编译成so库在Python引用

cooolr 于 2021-04-12 发布

run.go

package main

import "C"
import "fmt"
//export sum
func sum(N int) int {
        sum := 0
        for i:=0;i<N;i++ {
                sum += i
        }
        return sum
}

func main() {
        fmt.Println(sum(100000000))
}

go build --buildmode=c-shared -o run.so run.go

main.py

import os
from ctypes import *

current = os.path.dirname(os.path.abspath(__file__))

class StructPointer(Structure):
    _fields_ = [('p', c_longlong,),]

if __name__ == '__main__':
    run = CDLL(f'{current}/run.so')
    run.sum.restype = StructPointer
    result = run.sum(100000000)
    print(result.p)