Python调用Rust编译的共享库出现错误
怪我咯
怪我咯 2017-04-17 15:52:53
0
2
458

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

怪我咯
怪我咯

走同样的路,发现不同的人生

全員に返信 (2)
洪涛

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

#[no_mangle] pub extern fn process() {···}
いいねを押す+0
    刘奇

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

    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!