Python 端加载 C++ 端动态库

Python 端加载 C++ 端动态库#

可以使用 ctypes 加载动态库:

import ctypes

# 作为全局加载,使全局外部符号对其他 dll 可见。
_LIB = ctypes.CDLL("../cpp/sym_add/outputs/libs/libtvm_ext.so", ctypes.RTLD_GLOBAL)

加载失败,是由于 libtvm_ext.so 是在 libtvm.so 基础上拓展的,故而需要先提前加载 libtvm.so,或者直接 import tvm

import tvm
import ctypes

# 作为全局加载,使全局外部符号对其他 dll 可见。
_LIB = ctypes.CDLL("../cpp/sym_add/outputs/libs/libtvm_ext.so", ctypes.RTLD_GLOBAL)

加载动态库,也可以直接使用 load_lib()

from tvm_book.tvm_ext.libinfo import load_lib

_LIB_EXT, _LIB_EXT_NAME = load_lib(name="libtvm_ext.so", search_path=["../cpp/sym_add/outputs/libs"])

回调 C++ 函数:

import tvm
sym_add = tvm.get_global_func("tvm_ext.testing.sym_add")

测试:

from tvm import te
x = te.var("x")
y = te.var("y")
z = sym_add(x, y)
assert z.a == x and z.b == y
print(z)
x + y