信号 SIGSEGV:当我使用 go-python3 时,分段违规代码 = 0x1
Posted
技术标签:
【中文标题】信号 SIGSEGV:当我使用 go-python3 时,分段违规代码 = 0x1【英文标题】:signal SIGSEGV: segmentation violation code=0x1 when i use go-python3 【发布时间】:2021-08-17 12:58:56 【问题描述】:当我尝试执行我的代码两次时出现错误“分段违规”,我不知道如何解决这个问题...:/
func (a *MyActivity) Eval(context activity.Context) (done bool, err error)
pinString := context.GetInput("input1").(string)
// string to int
pinInt, _ := strconv.Atoi(pinString)
//defer python3.Py_Finalize()
python3.Py_Finalize()
python3.Py_Initialize()
if !python3.Py_IsInitialized()
fmt.Println("Error initializing the python interpreter")
os.Exit(1)
dir, err := filepath.Abs(filepath.Dir("./"))
if err != nil
//log.Fatal(err)
fmt.Println(err)
ret := python3.PyRun_SimpleString("import sys\nsys.path.append(\"" + dir + "\")")
if ret != 0
//log.Fatalf("error appending '%s' to python sys.path", dir)
fmt.Println("error appending to python sys.path" + dir)
// Here is the problem \\
oImport = python3.PyImport_ImportModule("detect") //ret val: new ref
if !(oImport != nil && python3.PyErr_Occurred() == nil)
python3.PyErr_Print()
//log.Fatal("failed to import module 'detect'")
fmt.Println("failed to import module 'detect'")
// Here is the problem \\
.
.
.
.
我尝试了很多东西,但我无法解决问题,使用库 go-python3 对我来说是新的
非常感谢您的帮助:)
【问题讨论】:
如果你愿意,我也可以发布 python 代码,但它很短我认为不是问题 ***.com/q/7676314/1256452(还有***.com/q/67533541/1256452)——或多或少是“你搞错了”的变体 谢谢伙计,我在 Golang 中尝试了函数 init() 并将我的导入和 Py_Initialize() 放入其中,它现在可以工作了...... :) 【参考方案1】:在我的函数 Eval 之前,我用 Golang 中的函数 init() 解决了这个问题。 我将所有导入以及 python3.Py_Finalize() 和 python3.Py_Initialize() 放入 init() 函数中,它对我有用:)
【讨论】:
在调用initialize之前不要调用finalize函数;由于您是在init
函数中执行此操作,因此您根本不应该调用 finalize。 (理想情况下,您应该在“正确的时间”在您的应用退出时调用 finalize 一次。不幸的是,通常不可能找到“正确的时间”——因此您往往是最好的根本没有调用它,这本身也很不幸:通常会因缺乏适当的关闭而产生连锁反应。以上是关于信号 SIGSEGV:当我使用 go-python3 时,分段违规代码 = 0x1的主要内容,如果未能解决你的问题,请参考以下文章
程序接收信号 SIGSEGV,ASM 中使用 SHRD 的分段错误
致命信号 11 (SIGSEGV) 在 0x00000000 (code=1) - PhoneGap