最近调一个红外摄像头,后续做红外视频检测和识别。厂家给的SDK是C++写的,也不好做二次开发,只好用python再做一次封装。
更新一个工具,pybind11,方便调用C++动态链接库
举个例子,python要调用SDK.cpp里面的函数,需要把SDK.cpp封装成libSDK.so的动态依赖库来调用。
g++ SDK.cpp -fPIC -shared -o libSDK.so
封装好后,python的脚本里调用
import ctypes
from ctypes import *
if __name__ == '__main__':
ll = ctypes.cdll.LoadLibrary
libmain = ll("./libSDK.so")#引用libSDK.so
ret = libSDK.setup()#这里就可以调用SDK.cpp里的方法啦
如果运行python脚本的时候报错,某一个函数未定义,甚至在SDK.cpp里又没有找到这个函数。说明函数Function,依赖其他的动态依赖库,在封装的时候,要链接依赖的so文件。
OSError: ./libSDK.so: undefined symbol: Function
举个例子,SDK.cpp依赖lib_A.so和lib_B.so动态依赖库,所以要链接这两个so文件,才能调用SDK.so
g++ SDK.cpp -L. lib_A.so lib_B.so -fPIC -shared -o libSDK.so
然后,就可以按上述调用方式实现啦。
reference:

本文记录了使用Python调用红外摄像头C++ SDK的过程,通过pybind11封装C++动态链接库libSDK.so。在调用过程中,遇到函数未定义的问题,原因是缺少对lib_A.so和lib_B.so的链接。解决方法是在封装时确保链接所有依赖库,从而成功调用SDK函数。
1191

被折叠的 条评论
为什么被折叠?



