Python调用Rust编译的共享库出现错误
Rust Code:
#[no_mangle]
use std::thread;
pub extern fn process() {
let handles: Vec<_> = (0..10).map(|_| {
thread::spawn(|| {
let mut _x = 0;
for _ in (0..5_000_001) {
_x += 1
}
})
}).collect();
for h in handles {
h.join().ok().expect("Could not join a thread!");
}
}
Cargo.toml:
[package]
name = "embed"
version = "0.1.0"
authors = ["hustlibraco <hustlibraco@gmail.com>"]
[lib]
name = "embed"
crate-type = ["dylib"]
编译得到target/release/libembed.so
共享库,然后我在此目录下面新建了一个python文件:
from ctypes import cdll
lib = cdll.LoadLibrary("target/release/libembed.so")
lib.process()
print("done!")
执行报错:
-bash-4.2# python invoke.py
Traceback (most recent call last):
File "invoke.py", line 5, in <module>
lib.process()
File "/usr/lib64/python2.7/ctypes/__init__.py", line 373, in __getattr__
func = self.__getitem__(name)
File "/usr/lib64/python2.7/ctypes/__init__.py", line 378, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: target/release/libembed.so: undefined symbol: process
这是Rust官方教程给的例子,为什么我这里会执行出错呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
#[no_mangle]应该写在函数前面,而不是use前...
楼主你是怎么编译的,我编译出来的结果没有libembed.so,好捉急_(:з」∠)_