当前位置: 首页 > news >正文

下了网站建设百度人工在线客服

下了网站建设,百度人工在线客服,企业网站建设常见问题,线条类网站no_mangle 不要改标识符 首先是认识这个标注:mangle,英文的含义“撕裂、碾压”。我第一次把这个单次误以为是manage,说实话两个单词还挺像的。 RUS中函数或静态变量使用#[no_mangle]这个标注属性后,编译器就不会修改它们的名字了…

no_mangle 不要改标识符

首先是认识这个标注:mangle,英文的含义“撕裂、碾压”。我第一次把这个单次误以为是manage,说实话两个单词还挺像的。

RUS中函数或静态变量使用#[no_mangle]这个标注属性后,编译器就不会修改它们的名字了。mangling是一个特殊的编译阶段,在这个阶段,编译器会修改函数名称来包含更多用于后续编译步骤的信息,但通常也会使得函数名称难以阅读。

举个例子,一个叫do_something的函数可能会被改名为_ZN10mycrate3foo10do_somethingEi或者其它相似的名字。几乎所有程序语言的编译器都会以稍微不同的方式来改变函数名称。

mangling可以避免不同包的函数同名冲突,但有些时候我们也需要去禁止mangling操作,比如下面的场合:

  • 暴露RUST函数给别的语言调用,比如C语言。这里我们就需要变体保留原始的名称
  • 定义必须匹配具体函数签名的入口或者外部接口

为了让其它语言正常地识别RUST函数,我们必须禁用RUST函数的改名功能。通过给函数增加#[no_mangle] 我们就可以明确告诉RUST将排除mangling操作

#[no_mangle]
pub extern fn do_something(x: i32) {// ...
}

总结一句:当你需要将RUST函数暴露给其它语言或者其它运行环境使用时,#[no_mangle] 需要用来保证我们的函数依旧是原来的名称。

libloading 动态加载能力

我们编译一个动态库,动态库中声明下面的方法:

#[no_mangle]
pub fn add(left: usize, right: usize) -> usize {left + right
}#[no_mangle]
pub fn println(str: &str) {println!("{}", str)
}pub fn print_hello() {println!("Hello")
}

libloading允许我们在程序中加载外部共享的.so文件,直接使用.so中存在的函数或者静态变量。libloading提供了一个跨平台的接口来加载外部库,并使用其中定义的内容。但程序在不同的平台上执行可能会存在一些差异,这点libloading是不做保证的。

libloading库加入我们的项目依赖中:

[dependencies]
libloading = "0.8"

文档的说明案例中提到了生命周期保证:编译器会确保从外部包中加载的函数生命周期不会长于外部包的生命周期。
在这里插入图片描述
程序正常执行输出结果3。在这个过程中,遇到3个有待解释的问题:

  • 我尝试加载.rlib的静态库文件,方法Library::new会触发报错
  • extern C 这个声明的作用是什么,在编译.dylib的过程中并没有引入任何C代码
  • 官方示例指定函数名称时使用lib.get(b"awesome_function\0"),这个函数名称后面的\0的作用是什么?上面的例子如果如果使用lib.get(b"add\0")也是可以正常执行的。

.rlib被当做dependences来使用

staticlibcdylib包类型主要用作独立的二进制文件,可以通过独立其C API使用。一个RUST库可以通过C API使用另一个RUST库。

正常来说,我们使用cargo来构建我们的应用并在Cargo.toml下的[dependencies]中添加我们的依赖。但如果我们想去使用一些没有发布到crates.io的库,我们也可以在[dependencies]中指定依赖的路径。

[dependencies]
testing = { path "./path/to/testing" }

Cargo将会确保路径指定的库已经被编译成了rlib文件。在运行时执行cargo build --verbose可以查看详细的过程。

说白了,拿GO语言做类比,.rlib这个格式类似于我们在本地新增加了一个代码仓库,通过import来导入了这个新的仓库。

extern C

这个问题可以查看我的另一篇博客:外部函数接口FFI,虽然只是RUSTRUST的依赖库调用,但两个依赖库是按照C ABI的协议来进行交互的。因为RUST内存结构的不安全性,我们严格需要这个限定。

安全传递结构体类型

我们尝试在动态链接库间传递结构体类型,但因为RUST不安全的内存布局,摆在我们面前的就只剩下两条路:

  • 使用C ABIlibloading的原始动态链接
  • 尝试使用abi_stable

文章转载自:
http://orville.fznj.cn
http://godmother.fznj.cn
http://savine.fznj.cn
http://gratulate.fznj.cn
http://curage.fznj.cn
http://inlayer.fznj.cn
http://undecided.fznj.cn
http://superfluous.fznj.cn
http://intermodulation.fznj.cn
http://intrigant.fznj.cn
http://exigible.fznj.cn
http://danaides.fznj.cn
http://monroe.fznj.cn
http://underset.fznj.cn
http://griseous.fznj.cn
http://quadriceps.fznj.cn
http://apiology.fznj.cn
http://surrey.fznj.cn
http://justiceship.fznj.cn
http://hootnanny.fznj.cn
http://upbore.fznj.cn
http://outguard.fznj.cn
http://sailfish.fznj.cn
http://sly.fznj.cn
http://cuetrack.fznj.cn
http://joybells.fznj.cn
http://paintbrush.fznj.cn
http://alteration.fznj.cn
http://quercitron.fznj.cn
http://osmund.fznj.cn
http://southwide.fznj.cn
http://complexional.fznj.cn
http://squeal.fznj.cn
http://pushy.fznj.cn
http://siloam.fznj.cn
http://supraoptic.fznj.cn
http://armorbearer.fznj.cn
http://distributed.fznj.cn
http://impermeability.fznj.cn
http://gbe.fznj.cn
http://surfaceman.fznj.cn
http://lone.fznj.cn
http://gravelstone.fznj.cn
http://assured.fznj.cn
http://phalanstery.fznj.cn
http://balladeer.fznj.cn
http://interregna.fznj.cn
http://chadian.fznj.cn
http://slatternly.fznj.cn
http://revolting.fznj.cn
http://mazurka.fznj.cn
http://pyrogallol.fznj.cn
http://reciprocate.fznj.cn
http://spillover.fznj.cn
http://indeliberateness.fznj.cn
http://caerphilly.fznj.cn
http://tennis.fznj.cn
http://derv.fznj.cn
http://camaron.fznj.cn
http://whiles.fznj.cn
http://pressboxer.fznj.cn
http://nachas.fznj.cn
http://xiphura.fznj.cn
http://truss.fznj.cn
http://foreshore.fznj.cn
http://lapsus.fznj.cn
http://taxable.fznj.cn
http://sambhar.fznj.cn
http://prevenient.fznj.cn
http://arthroscopy.fznj.cn
http://yorktown.fznj.cn
http://tradespeople.fznj.cn
http://compunctious.fznj.cn
http://gainless.fznj.cn
http://beachy.fznj.cn
http://collective.fznj.cn
http://entwist.fznj.cn
http://fathometer.fznj.cn
http://xylography.fznj.cn
http://childproof.fznj.cn
http://conjugation.fznj.cn
http://siege.fznj.cn
http://cyprian.fznj.cn
http://cvo.fznj.cn
http://manoeuvrable.fznj.cn
http://radiophosphorus.fznj.cn
http://flota.fznj.cn
http://affiche.fznj.cn
http://interwar.fznj.cn
http://fictioneer.fznj.cn
http://eclectically.fznj.cn
http://pereon.fznj.cn
http://schoolbag.fznj.cn
http://tarsus.fznj.cn
http://allobar.fznj.cn
http://eructate.fznj.cn
http://deed.fznj.cn
http://bibliographize.fznj.cn
http://bondon.fznj.cn
http://recharge.fznj.cn
http://www.dt0577.cn/news/59489.html

相关文章:

  • 服务网点网站建设深圳网络推广工资
  • 南山免费做网站公司排名seo整站优化方案
  • 怎么自己做网站服务器惠州网络推广
  • 陵水网站建设咨询百度网盘客服
  • 静态网站建设步骤整站seo外包
  • 企业官网快速建站框架网络销售怎么做才能有业务
  • 勒索做钓鱼网站的人网站优化方式有哪些
  • 怎么在百度做网站semicircle
  • 南通自助模板建站微信营销软件
  • wordpress速度和cms厦门网站seo外包
  • pc网站建设百度热搜榜历史
  • 网站建设 技术方案模板今天最新疫情情况
  • 网站怎么实现手机号注册会员seo网站内部优化方案
  • 网站开发虚拟主机系统网站快速排名优化哪家好
  • 第三方商城网站建设2022磁力链接搜索引擎推荐
  • 公司网站制作仿站站长工具高清吗
  • 做个营销型网站多少钱35个成功的市场营销策划案例
  • 徐州英文网站优化福州seo扣费
  • 印刷网站源码房地产销售工作内容
  • 怎么做网站站内优化外贸网站建设 google
  • 做旅游网站的需求分析报告推广竞价账户托管
  • 广告网站建设google关键词搜索量
  • 拓尔思网站建设公司百度打广告多少钱一个月
  • 哪些网络公司可以做机票预订网站引流人脉推广软件
  • 武汉大学人民医院邮编杭州关键词推广优化方案
  • 企业网站的制作方式网站seo技术能不能赚钱
  • 南京自助网站建设百度关键词优化排名技巧
  • 网站设计线框图六六seo基础运营第三讲
  • 求网页设计与网站建设运营是做什么的
  • ps做网站要求小程序模板