解决p/invoke在Linux下的段错误问题

技术 · 2023-03-19

前言

最近公司打算将操作系统迁移到Linux环境下,于是调研了一下现有引用类库的情况,项目中有个最主要的引用是国产的TLQ,多个项目引用了,看了一下TLQ的介绍,本身就是跨平台的,不过公司在用的是官方给的.net framework版本,本身不是跨平台的,经过协商,对方把源码发了过来,改为.net standard2.0也编译通过了,在Linux下却出问题了。

Lib引用

对于源码中所有P/invoke相关的将dll去掉,在Linux系统下,会自动查找lib开头的类库,如果仍然查找不到,就要设置类库的加载位置了,很简单,一共两种方式,一种是增加LD_LIBRARY_PATH的环境变量,一种是编辑/etc/ld.so.conf文件,增加类库目录,由于网上讲解很多,不再赘述。

内存对齐

遇到的最大问题是在Windows下一切正常,但是在Linux下会报段错误,第一次遇到的时候还很懵逼,后来查了一下原来是指针越界或重复释放内存之类的操作,刚开始的时候由于改动了代码,一直以为是自己改出来的问题,尝试了很多方式都一无所获,后来又经过协商才发现跟自己的改动完全没有关系,问题是出在了一个结构体上,这个结构体一直没有动过,所以没有往这个方向去想,并且项目是在收消息的时候才出现的错误,且只有在第二次收消息的时候才会出段错误,经过了半天调试依然没有头绪,就在快要放弃时突然发现原来类库方为了做跨平台在引用线程时增加了区分,windows下用的int32来代替线程id,Linux下则直接用的Thread_t,那么Thread_t在Linux下是什么类型呢?网上查了一下,果然跟Windows不一样,类型为uint64_t,对应的c#格式为:ulong。查到这个答案的时候心里并没有在意,因为前面已经尝试过n种方法了,但是在改动完之后在Linux上测试,奇迹却出现了,完全正常了。

结束

原本一直以为运行时在进行底层调用时对Intptr进行了改动,造成的指针错误,后来才发现原来是自己错了,如果项目中再出现段错误了,那么就要仔细对比每个数据类型了,通常是类型封送错了。

P/Invoke 段错误 c#
  1. kgtspbzywd 6 天前

    《抓住》恐怖片高清在线免费观看:https://www.jgz518.com/xingkong/99310.html

  2. vcvwaotaow 6 天前

    《强悍媳妇》泰国剧高清在线免费观看:https://www.jgz518.com/xingkong/59585.html

  3. Administrative support Dawn L cytotec online pharmacies Even if you do not talk about technology, you can tell a little story about how to find difficulties in research and development and how to overcome them

  4. fesqpbzxxk 9 天前

    你的文章让我感受到了生活的美好,谢谢! https://www.4006400989.com/qyvideo/90290.html

  5. gaanzqoaps 10 天前

    你的文章内容非常精彩,让人回味无穷。 https://www.4006400989.com/qyvideo/76585.html

  6. kldpvmkktv 13 天前

    《蒸发密令:重生2022(豪华珍藏版)》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/165668.html

  7. kgwihuykxk 16 天前

    你的文章充满了欢乐,让人忍不住一笑。 http://www.55baobei.com/O5bKOQk4yg.html

  8. xyrelylyyx 19 天前

    你的文章让我感受到了不一样的风景,谢谢分享。 http://www.55baobei.com/WiRCYBWpKg.html

  9. ceeahszgel 19 天前

    你的文章内容非常卖力,让人点赞。 http://www.55baobei.com/LNB6J38gp5.html

  10. higjzppezv 19 天前

    你的文章内容非常卖力,让人点赞。 https://www.4006400989.com/qyvideo/31429.html

  11. blanivila 22 天前

    buy priligy 60 mg The mean HV W was coincidentally 12 mL kg in our study

  12. ittgxjjuht 22 天前

    你的文章内容非常用心,让人感动。 http://www.55baobei.com/yNwCE5cLjq.html

  13. jddiutfdqq 23 天前

    你的文章让我感受到了艺术的魅力,谢谢! https://www.yonboz.com/video/18065.html

  14. 哈哈哈,写的太好了https://www.cscnn.com/

  15. 想想你的文章写的特别好https://www.ea55.com/

  16. 想想你的文章写的特别好https://www.237fa.com/

  17. 小新 09-24

    zhrlno93615GU-文章很不错,感谢作者!https://kan.xiaoxinbk.com/46904.html/

    1. @小新

      can i get cytotec pills Csa can also be administered intravenously at a dose approximately 30 of the oral dose

    2. blanivila 22 天前
      @小新

      2021 Nov 19; 26 22 6992 priligy buy online usa From the past two months I think iv not been ovulating because I don t get any symtoms of ovulation and I have more dry cycles than usual but period is exactly on time, i have a 30 day cycle and I m trying to concieve what can this be its worrying me

Theme Jasmine by Kent Liao