首页 > 解决方案 > Go buildmode 选项不生成头文件

问题描述

我正在编写一个 python 程序,它可以在某个触发器上调用一个 go 程序。我正在关注一些链接并了解了生成 .so 和另一个头 (.h) 文件的 buildmode。我尝试添加两个整数示例并且工作正常。但是,就我而言,没有生成头文件。

我在 go 中使用的特定程序是一个修改后的示例,它连接到 TTN(The Things Network),程序结构如下所示:

package main

import "C"

import (
//  "encoding/hex"
//  "encoding/json"
    "fmt"
//  "io/ioutil"
//  "os"

    ttnsdk "github.com/TheThingsNetwork/go-app-sdk"
    ttnlog "github.com/TheThingsNetwork/go-utils/log"
    "github.com/TheThingsNetwork/go-utils/log/apex"
    "github.com/TheThingsNetwork/go-utils/random"
    "github.com/TheThingsNetwork/ttn/core/types"
)

const (
    sdkClientName = "my-amazing-app"
)

func main() {
    log := apex.Stdout() // We use a cli logger at Stdout
    log.MustParseLevel("debug")
    ttnlog.Set(log) // Set the logger as default for TTN

    ...
    ...

}

如果尝试从简单的 python 程序调用,我会收到以下错误:

Loaded go generated SO library
Traceback (most recent call last):
  File "ttnPublishCall.py", line 5, in <module>
    result = lib.main()
  File "/usr/lib/python3.7/ctypes/__init__.py", line 369, in __getattr__
    func = self.__getitem__(name)
  File "/usr/lib/python3.7/ctypes/__init__.py", line 374, in __getitem__
    func = self._FuncPtr((name_or_ordinal, self))
AttributeError: ./publishOnly.so: undefined symbol: main

我已经尝试编写自定义头文件(提到主函数),但它不起作用。此外,我尝试创建另一个可以从主函数调用但没有帮助的函数。

标签: pythoncgo

解决方案


推荐阅读