Python调用Rust编译的共享库出现错误

发布于 2022-09-01 17:53:24 字数 1315 浏览 29 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尬尬 2022-09-08 17:53:24

#[no_mangle]应该写在函数前面,而不是use前...

#[no_mangle]
pub extern fn process() {···}
爱你是孤单的心事 2022-09-08 17:53:24

楼主你是怎么编译的,我编译出来的结果没有libembed.so,好捉急_(:з」∠)_

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文