如何解决从 Go 和 Python 调用共享库函数
这里有类似的问题 How can I call linux shared library functions in Go?
但初学者无法理解。
我是一名 C 程序员,学习 Go 的过程很艰难。 目前正在研究和移植现有的 Python 代码(python1.py 和 python3.py)到 Go
现有的Python文件(连同delphi.cpp)已经编译生成.so文件 我需要从 Go 访问 delphi.cpp(带有 boost python 的 C++)下的函数。
Python1.py调用delphi.cpp下定义的类Net
python1.py
class NetworkData(object):
@classmethod
def _init(cls):
@classmethod
def Func1(cls,keys):
self.uname = hdd
self.__delphi = delphi.Net(hdd,python3.getAllData,NetworkData,kwargs)
def TCP(self):
return self.__delphi.TCP
python3.py
class getAllData(object):
def _init(cls):
ids = {
"M1": 0x000002,"M2": 0x50001,}
delphi.cpp
#include <boost/python/module.hpp>
#include <stdio.h>
#define __PYTHON3__
using namespace boost::python;
using std::string;
BOOST_PYTHON_MODULE(delphi)
{
PyEval_InitThreads();
to_python_converter<beint32_t,beint32_to_python>();
to_python_converter<beint64_t,beint64_to_python>();
docstring_options doc_options;
doc_options.disable_py_signatures();
class_<Net>("Net",netDocs,init<string,object,dict>())
.add_property("TCP",&Net::getTCP,tcpDocs)
}
static const char * netDocs =
Net::Net(string hd,object getDataFn,object _networkdata,dict kwargs)
static const char * tcpDocs =
std::string Net::getTCP() {
return <data>();
}
我复制了这些位置下的 .so。
程序结构
/go
/bin
main
delphi.so
/src
/dependencies
d1.go
d2.go
/main
delphi.so
main.go
delphi.cpp(使用 Boost.Python)。我需要导入在delphi.cpp下定义的函数(例如TCP)
在使用 Go 之前,我想从命令提示符测试 Python 函数。 delphi.Net 下的子函数有 TCP,getType,callT(,UDS .
$python3
>>import delphi
>>delphi.Net.
>>delphi.Net.TCP
delphi.Net.getType
delphi.Net.callT(
delphi.Net.UDS
>>delphi.Net().TCP
我尝试调用 delphi.Net().TCP 并且我得到的错误是
Boost.Python.ArgumentError:Python 参数类型输入
Net.init(Net) 与 C++ 签名不匹配:
init(_object*,std::__cxx11::basic_string
我知道我没有传递参数就调用了TCP函数,我不明白如何将参数发送到delphi.Net
delphi.Net(hdd,kwargs)
我尽力以易于理解的方式提出问题。
如何调试和理解此类错误?
我将在 Go 中使用
exec.Command("python","-c","import delphi; delphi.Net().TCP)")
我想用 Python 测试这部分,然后在 Go 中应用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。