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

本文介绍了在尝试使用Python通过ctypes加载Rust编译的dylib共享库时遇到的'undefined symbol'错误。示例展示了Rust代码和Cargo配置,以及Python调用该库的代码。错误发生在调用Rust的`process`函数时。问题可能在于符号导出或链接设置。解决方案可能涉及检查Rust代码的导出和编译配置。
摘要由CSDN通过智能技术生成

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 "]

[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

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官方教程给的例子,为什么我这里会执行出错呢?

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd18237.html

相关文章 Recommend

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值