首页 > 八字 > 八字常识

八字不合真的不能在一起吗?

时间: 来源:www.86027.cn

先说答案,能的,只要不迷信。

当然,我说的是Linux下C++程序同时链接两个动态链接库后的调用时崩溃。

我学艺不精,浪费了一整天才定位到问题并找到解决方案,期间咨询了技术支持客服,百度,和其他老程序员。

剧情是这样的,我用金仕达提供的动态链接库libkcc.so采集加密的机器信息,用作期货的登陆委托,(去年期货新增穿透式监管,这是一个在量化交易开发中的普通需求)。这个库只需要用户调用金仕达头文件里唯一的一个函数KingStar_GetSystemInfo即可。

然后在Makefile里链接时加上libkcc.so。

so far so good

但是可能有些账户走的期货公司用的是CTP,那我还需要用CTP的动态链接库LinuxDataCollect.so给的函数获取机器信息,用法跟金仕达几乎一样,只是函数名不一样,叫CTP_GetSystemInfo。所以我的程序里就先后分别调用这两个库中的“GetSystemInfo”。然后问题就来了,一运行到KingStar_GetSystemInfo就segmentation fault

为了缩小问题范围,我把所有跟KingStar_GetSystemInfo无关的代码全部注掉,直到这个程序只剩上图中那三行。有意思的来了,

again。

此时这个程序跟上次成功运行只有一个区别:在编译链接时增加了一个LinuxDataCollect.so

我觉得这就是八字不合了,两个动态链接库居然不能共存?!

基于print的debug已经不行了

由请gdb登场

从trace back的信息#3可以看到,居然RSA_free()调用的是CTP的库LinuxDataCollect.so,应该这就是问题所在了。通过ldd命令可以知道libkcc.so 依赖了/lib/x86_64-linux-gnu/libcrypto.so.6,再用nm -D libcrypto.so.6 可以看到他也有RSA_free这个函数。所以应该是libkcc.so误用了LinuxDataCollect.so的RSA_free释放了错误的空间位置,导致段错误。

解决办法,动态调用动态链接库

主要用到dlfcn.h中的dlopen、dlsym和dlclose,链接时加上参数-ldl即可。改造后的代码如下:

虽然浪费了一天解决了一个个小小的问题,但对理解linux下的c++还是有收获的,主要运用到以下知识点:

  • gdb
  • ldd
  • nm
  • dlfcn.h
  • 面向其他老程序员和百度的编程(这点最重要)

如果还有别的解决办法请教育我。

精选推荐

  • 自学八字|阴阳五行第一节的生克定律是命学最基本、最重要的原则之一
    自学八字|阴阳五行第一节的生克定律

    导读:为了针对各个层次的读者 , 每日更新自学八字篇,分为入门—进展一提高三个阶段 。无论你有无基础,都可以从中受到启发 。尤其对古书上一些晦涩难懂的字句,用通俗易懂的语言表达出来,一看就明白怎样应用,只要认认真真地根

  • 自媒体风向标:实操“六部曲”
    自媒体风向标:实操“六部曲”

    现在做自媒体的人越来越多了,特别是今年!但是很多人对自媒体并没有充分的认识,甚至有的人在做自媒体,却不知道自媒体,比如很多人都拍着抖音,但并知道自己这就是自媒体的一种。很多人理解的自媒体,就是只要弄几个号,然后往上面

  • 自学八字:金不换大运导读:金不换大运导读⑦甲日主
    自学八字:金不换大运导读:金不换大运

    7、甲木日干居午月,伤官木火喜生财顺行怕入西方运,东北行来更妙哉午月:午作丁看,即是伤官当令格局——伤官喜生财,更何况午字本身伤官生财(藏干)单以十神定位——财当令,男命得佳妻女命则相反——一财得所红颜失配,所以按照基

  • 自带禄神星的八字
    自带禄神星的八字

    生人:农历2023年正月二十八  12点辛          庚           甲         庚巳          寅           寅         午5岁起运大运:己丑     戊子    丁亥     丙戌             乙酉    甲申     癸未    壬午乾造甲木日

0